程序员数学:用Python学透线性代数和微积分
上QQ阅读APP看书,第一时间看更新

关于代码

本书(希望)按照逻辑顺序来介绍知识点。你在第2章学到的思想适用于第3章,第2章和第3章的思想也会出现在第4章,以此类推。然而代码并不总是按照这样的“顺序”来写的。也就是说,在一个完成了的程序中,最简单的思想并不总是出现在源代码中第一个文件的第一行。这种差异让我很难以一种明了的方式呈现全书的源代码。

我的解决方案是,为每一章搭配一个Jupyter Notebook形式的代码文件。Jupyter Notebook就像录制好的Python交互式会话一样,内置了图表和图像等视觉效果。在Jupyter Notebook中写代码非常自由,你可以随着想法的成熟而在会话中不断重写。每一章的notebook都包含各节的代码,按照书中出现的顺序运行。最重要的是,这意味着你可以在阅读过程中运行书中的代码,不需要读完一章再运行完整的代码。附录A会告诉你如何配置Python和Jupyter Notebook,附录B包括一些实用的Python特性。

本书包含许多源代码示例,都使用等宽字体与普通文本区分开来。如果在正文中有解释,代码注释将被删除。许多代码清单带有注释,用来强调重要的概念。

在一些情况下,示例的代码由一个独立的Python脚本组成,既可以单独运行(例如,python script.py),也可以在Jupyter Notebook的代码框中执行(例如! python script.py)。我在一些notebook中加入了对独立脚本的引用,所以你可以逐节查找相关的源文件。

整本书中的一个约定是,用Python交互式会话中的>>>提示符来表示运行单行Python命令。我建议使用Jupyter Notebook而不是交互式Python,但无论在哪种情况下,带>>>的行都代表输入,不带>>>的行代表输出。下面是一个代码块的例子,代表运行Python代码2 + 2

>>> 2 + 2
4

相比之下,下面这个代码块没有>>>提示符,所以只是普通的Python代码,而不是输入和输出的序列。

def square(x):
    return x * x

本书有上百个练习,是对已讲过知识的直接应用;还有一些小项目,涉及的内容更多,需要更多创造力或新的概念。本书中的大多数练习和小项目希望你用Python代码来解决一些数学问题。除了一些开放式的小项目外,本书几乎包含了所有问题的解决方案。你可以在相应章节的notebook中找到解决方案的代码。

本书中的示例代码和彩色图片可以从图灵社区本书主页上下载。