身。有些读者可能对静态的需要编译的语言更熟悉,但是这些语言可能 不会提供 REPL(read-eva l-print loop,读取、求值、输出的循环)。在 这里我想强调一下 Python 交互式控制台,也就是 REPL,作为一个学习 工具的重要性。 doctest(https://docs.python.org/3/library/doctest.html)是 Python 的一个标 准库,做测试用的。这个库通过模拟控制台对话来检验表达式求值是否 正确,而本书中几乎所有代码的测试,包括那些在控制台里的输出,都 是通过这个库来进行的。doctest 看起来就像是 Python 交互式控制台的剧 本,你甚至都不需要了解它背后的运行机制就可以直接用它来试验书里 的例子。 我有时为了事先说明一段代码的目的,会在展示代码之前先摆出相应的 doctest 文本。这是因为我认为,在考虑如何实现一个功能之前,先严格 地列出这个功能能做什么,这能帮助我们在编程时把精力花在该花的地 方。测试驱动开发(TDD)的精髓就是先写测试,我后来发现这种精神 在教学中也是大有益处的。如果你对 doctest 还不熟悉,花点时间阅读 它的文档(https://docs.python.org/3/library/doctest.html)。结合本书的源 码(https://github.com/fluentpython/example-code),你可以在操作系统的 控制台里键入 python3 -m doctest example_script.py 来验证书 中几乎所有代码的正确性。 硬件 书中有一些简单的时间和基准测试,跑这些测试的时候我用的是写书时 的两台笔记本电脑。一台是产于 2011 年的 MacBook Pro 13 英寸笔记 本,配置是 2.7 GHz 的英特尔 Core i7 处理器、8GB 的内存和机械硬 盘;另一台是产于 2014 年的 MacBook Air 13 英寸笔记本,配置是 1.4 GHz 的英特尔 Core i5 处理器、4GB 内存和一个固态硬盘。MacBook Air 的处理器虽然慢一些,内存也没有另一台多,但是它的内存快一些 (1600 MHz,MacBook Pro 13 英寸则是 1333 MHz),另外它的硬盘也 更快,因此在日常使用中我并没有感觉到两台笔记本有速度上的差异。 杂谈:个人的一点看法 从 1998 年起,我一直在使用 Python,也做 Python 教学,另外还一直在 为它辩护。我一直都很享受这个过程,尤其是喜欢研究 Python 同其他语 言在设计和理论上的不同。因此在有些章节的最后,我会加上一点自己 对 Python 以及其他语言的看法,我把这部分叫作“杂谈”。如果你对这些 东西不感兴趣,跳过即可,因为这些并不是必读的。
第 1 章?Python 数据模型
第 2 章?序列构成的数组
第 3 章?字典和集合
第 4 章?文本和字节序列
第 5 章?一等函数
第 6 章?使用一等函数实现设计模 式
第 7 章?函数装饰器和闭包
第 8 章?对象引用、可变性和垃圾 回收
第 9 章?符合Python风格的对象
第 10 章?序列的修改、散列和切 片
第 11 章?接口:从协议到抽象基 类
第 12 章?继承的优缺点
第 13 章?正确重载运算符
第 14 章?可迭代的对象、迭代器 和生成器
第 15 章?上下文管理器和 else 块
第 16 章?协程
第 17 章?使用期物处理并发
第 18 章?使用 asyncio 包处理并 发
第 19 章?动态属性和特性
第 20 章?属性描述符
第 21 章?类元编程
|