Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- 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 文件流读写浮点数还是很方便的
- 这就比他的前辈 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 巨大成功的原因
- 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 即可。




