Python版本、源代码库和类型提示
本书中的源代码遵守Python语言的3.7版的规范。代码运用到了只有Python 3.7才提供的Python特性,因此有些代码无法在低版本的Python中运行。请不必费力让这些示例代码在低版本的Python中运行了,先下载最新版的Python吧。
本书只会用到Python的标准库(第2章略有例外,其中安装了typing_extensions模块),因此本书的所有代码应该在所有支持Python的平台上(macOS、Windows、GNU/Linux等)都能运行。虽然本书的大部分代码在其他兼容版本的Python 3.7解释器中可能也能运行,但它们仅在CPython(Python官方提供的主流Python解释器)中进行了测试。
本书不会介绍Python工具的用法,如编辑器、IDE、调试器和Python REPL。本书中的源代码可在GitHub上搜索“Classic Computer Science Problems in Python”来获取。这些源代码按章放置在相应的文件夹中。在每章内容中代码清单的开头都带有源文件的名称,在代码仓库的对应文件夹中即可找到该源文件,只要输入python3 filename.py或python filename.py就应该能运行该章问题对应的代码,Python 3解释器的名称则取决于当前计算机的环境设置。
本书的所有代码清单全都用到了Python类型提示(type hint)特性,也称为类型注解(type annotation)。类型提示是Python语言相对较新的一种特性,对从未见过它们的Python程序员而言,或许有点儿望而生畏。使用类型提示的原因有以下3点。
(1)明晰了变量、函数参数和函数返回值的类型。
(2)有了第1点,在某种程度上就实现了代码的自文档化(self-document)。再也不必通过搜索注释或文档字符串(docstring)来了解函数的返回类型了,只需查看其签名即可。
(3)允许对代码进行类型检查,以确保正确性。mypy就是一种流行的Python类型检查程序。
并非每个人都会喜欢类型提示,坦率地说本书通篇采用这一特性就是冒险。我希望类型提示能够提供一些帮助,而不是成为一种障碍。编写带有类型提示的Python代码需要花费更多的时间,但是在回过头来阅读代码时会更加清晰。有意思的是,类型提示对在Python解释器中实际运行代码没有丝毫影响。对于本书任何代码,如果把类型提示删掉,代码应该照常运行。如果读者以前从未见过类型提示,并且在深入学习本书之前需要对其进行更全面的了解,请参阅附录C,那里给出了一堂关于类型提示特性的速成课。