Skip to content

Latest commit

 

History

History
317 lines (273 loc) · 9.76 KB

File metadata and controls

317 lines (273 loc) · 9.76 KB
Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0442
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在: 
	- 个人网站: `https://oeasy.org` 
	- 蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
	- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
	- Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

python 的进化

回忆

  • 上次在文件流中读写了二进制浮点
  • python 文件流读写浮点数还是很方便的
  • 这就比他的前辈 ABC 语言强了好多
  • 为什么 python 对文件读写这么重视?🤔

失败

  • python 的成功很大一部分原因来自于 ABC 的失败
    • ABC 上面的读写都是来自于 punch card 纸带和磁带
    • 潜在的用户是数学家和科学家
  • 个人电脑开始出现
    • 个人电脑带了形形色色的软件包
    • 用来处理文件.其中有电子表格文件、字处理文件
    • ABC 的用户希望能用 ABC 写个小程序
    • 从他们的字处理文件读出一些数据
    • 然后把数据写到电子表格里
    • 或者反过来
    • 但是他们望洋兴叹
    • 只能怪 IO 的无能
  • 他们想处理的是数据
    • 但是数据却呆在文件里面
  • 而 ABC 里没有文件的概念
    • 这让事情复杂化了
    • 让 ABC 里的缺位的文件支持雪上加霜的是
    • 要扩展 ABC 语言并非易事

架构

  • 如果你这样想
    • 这个语言是用 C 实现的
    • 所以我们在它的标准库里面加个读文件的函数难道不就行了?
  • 那就大错特错了
  • ABC 是没有标准函数库一说的
  • 它是有些内置命令
  • 但是管这些命令的是
    • 分词
    • parser 语法分析器
    • 语义分析
    • 都相关
  • ABC 也有内置函数
    • 但是这些函数和运行时绑在了一起
    • ABC 也不支持导入 import 二进制包
    • 要为这个语言的标准功能添砖加瓦简直是难如登天
    • 得从根上解决
  • 其实这是每个语言都会遇到的问题
    • 哪些是关键字
      • 哪些是内置函数
      • 哪些是引入的模块
    • 哪些东西在编译的时候解决
      • 哪些东西运行时解决
  • Guido 真的希望 ABC 成功
    • 为此他进行了一次旅行

一次旅行

  • 在 1986 年的时候
    • Guido 进行了一次旅行
  • 当时还没有发达的互联网
    • 只有 usenet 和 email
    • 学编程语言靠的还是杂志和书
    • 书出出来半年过去了
    • 可能会有一些回馈
    • 很慢
  • Guido 的同事 Lion Bear 就出了一本书
    • 所有的希望都在这本书上
    • 但是后来的编辑反馈很慢
    • 后来又找了一家出版公司
    • 总之了最后就黄了
  • Guido 带着九轨磁带(当时的硬盘)
    • 去美国见网友了
    • 他只有 3、4 个美国网友的电话和 email
    • 还有地址
    • 这些网友是对 ABC 有兴趣的网友
    • Guido 主动去和他们联系
    • 本想着在 unix 上安装 ABC 语言环境
    • 也能看出 Guido 积极获取用户反馈
  • 这真的很疯狂
  • 但是到了之后
    • 才发现必须得有特定型号的机器型号
    • 特定的 unix 版本
    • 特定版本的编译器
    • 虽然用的都是可移植的 c
    • 但是当时的 c 编译器是各个硬件厂商自己做的
    • 本身也有问题
    • 没有预料到的硬件特性
  • ABC 当时在美国没有机会运行
    • Guido 很痛苦
    • 1987 年 cwi 决定取消 ABC 项目

反思

  • ABC 没有读写文件的原因是
    • cpu 的架构不统一
    • 平台系统不统一
    • 读写方式不统一
    • 读写硬件不统一
    • 没有统一的驱动方式
  • 这不是写一个 c 的函数就解决的问题
    • 因为没有一个可以调用的写好的 c 文件读写库
  • 潜在用户确有数据的需求
    • 科学方面的大量读写工作
    • 用户需要有自己的数据
    • 包括数据源和数据结果
  • python 一开始就把读写文件作为一个核心
    • 不用引入任何的包
    • 直接 open
    • 这是我见过最快速的文件打开方式
    • 从编写源程序的角度来说
    • 最快速的
  • 这无疑满足了用户需求
  • 也是后来 python 巨大成功的原因

amoeba

  • ABC 项目黄了之后
    • 另一个程序员离开了 cwi
    • Guido 开始新的工作
    • Guido 继续在 tenenbaums 的项目组里面工作
  • 这次的项目是 Amoeba
    • 一个分布式的操作系统

图片描述

  • Amoeba是单细胞有机体
    • 没有器官
    • 赤裸、柔软
    • 因可向各个方向伸出伪足
    • 以致体形不定而得名
    • 伪足除具行动的功能外
    • 还能摄食

系统

  • 阿米巴虫中的一种叫做黏菌
    • 黏菌饿了的话
    • 就会自我分裂出自身
    • 然后四散去寻找食物
    • 找到了之后
    • 还可以涌现 emergence 出一条食物传输的通道
    • 有点类似我们的血管和毛细血管
    • 分给其他黏菌
  • 这有点像计算机分出很多虚拟机
    • 然后跨计算机的虚拟机又构成集群的感觉
    • 大概这也是这个计划叫做阿米巴的原因
    • 经济学上也有类似的叫做阿米巴经营
  • 京瓷公司认为
    • 现场有神灵
    • 答案永远在现场
    • 把公司分为一个个的“阿米巴”小集体
    • 各个小集体就像是一家家的中小企业
    • 在保持活力的同时
    • 以“单位时间核算”这种独特的经营指标为基础
    • 把大公司的规模和小公司的好处统揽于一身。

阿米巴系统

  • 阿米巴系统是一个微内核
    • 基于以太网
    • 实现了类似于因特网的协议
  • 阿米巴系统之间可以互相通信
    • 当时已经有了 unix 系统
    • Amoeba 系统和 unix 之间可以通信
  • 有很多关于登录的理论
    • 但是没有一个真正的实现
  • Guido 用 c 制作 type 磁带备份系统
    • 这个时候 Guido 已经有了 10-15 年的 c 语言经验
    • 这时候的需求是开发登录系统
    • 他想用一种类似于 ABC 语言的东西开发这个登录系统
    • 这个时候是 88、89 年
    • 其实 ABC 的代码比 86 年的时候又有了一些进化
    • usenet 上面也有一些贡献
  • 这也就是 python 开始的地方
    • Guido 开始用业余时间用 c 写 python 这门语言
    • 早年间 python 的概念是作为 Amoeba 系统的软件开发包存在的
    • 文件读写一开始就在 python 的内置的核心函数库
    • 还可以直接和 Amoeba 系统的网络 api 进行通信
  • 语言很重要的就是语法
    • python的语法如何被识别呢?

制作过程

  • 最早的是词法分析器 lexical analyser
    • 因为他是语法分析 parser 的前提
    • 当时有一些现成的东西
    • 但是靠不住
  • Guido 开始自己写
    • 然后是解释器和一些类库
    • 总共花了 3-4 个月的时间

命名

  • ABC 就很像 American Business Consulting Group
    • 太大众化了
    • 需要一个能够获得注意力
    • 不长也不短的名字
    • 不想要来自希腊神话的名字
    • 也不想太过学术化
  • Python 能让看过太阳蟒蛇戏剧团的人感到共情
    • 熟悉但不是特别常用的单词
    • 能够带来特定的态度
    • 就这样决定了

定位

  • 脚本 shell 语言并不是一门语言
    • 而是一系列命令的顺序执行流程
    • 会调用具体的二进制程序去处理相关的文件
    • 原本是敲三个命令
    • 现在变成把这三个命令放到一个脚本里面
    • 他只是依次执行命令的批处理
    • 但是比如检查输入输出是否存在之类的东西
    • 还是要靠程序本身
    • 今天的 bash 和 zsh 也一样
  • python 可以自己定义读写的功能
    • 比如一行一行读之类的
    • c 语言效率高
    • 可很好地操作底层硬件
    • 但是开发成本太高了
    • 当时的定位就是在 c 和脚本 shell 之间的桥梁
    • 既有 shell 的便捷也有 c 语言的超级控制能力

吸取

  • ABC 并非一无是处

图片描述

  • ABC 也有个游乐场可以交互
  • 比如用缩进控制语句组范围
    • 比如 list 和 dictionary 的数据结构
    • 字符串和数字的不可变
      • 这里指的不是字符串变量和数字变量
  • 不用指出所用数据类型,系统会自动辨认

排斥

  • ABC 也有很多缺陷

图片描述

  • 所有字母都大写
    • 关键字、函数名 大写
    • 变量和表达式小写
  • Guido 不喜欢那些大写字母
    • 也难怪从小就是反战组织
    • 而且看的也是逆向思维的喜剧
    • 对于高大上有一种天然的排斥
    • 大写就像大喊大叫
  • 是早年间大型机那种很落伍的写法
    • 而相对来说 unix 都是小写
    • Guido 选择 unix 的方式

更多缺陷

  • ABC 的列表也有缺陷

    • 都是必须排好序的
    • 对于数值可以理解
    • 但是对于文件的行就不合适
  • ABC 还有个问题是他想干一切

    • 系统
    • 编程环境
    • 系统存储
    • 编辑器

图片描述

  • unix 哲学是
    • small tools that do things well
    • and work very well with other small tools that do different things.

读写的不同

  • ABC 有自己的电子表格格式
    • 如果读到一个电子表格需要转化到 ABC 自己的数据结构
    • 很麻烦
  • python 直接读excel文件
    • 然后把电子表格解码就好了
    • 至于解码的代码
    • 社区会有人写出来作为一个库来存在
  • 这两者理念不同
    • ABC 想从上而下统治一切
    • python 想打一场从下而上的人民战争
  • 正如 拓扑的物理连接
    • 改变了社会科技的方方面面

总结

  • python 的成功不是偶然的
    • 新的嫩芽一定是发于陈腐的腐殖质
    • 他吸取了 ABC 好的一面
    • 也吸取了 shell 和 c 好的一面
    • 他可以很方便地操作文件

图片描述

  • 其实我们也可以做一个拷贝程序?🤔
  • 下次再说 👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。