Think Python
如何像计算机科学家一样思考
Allen Downey
译者:EarlGrey et al
Green Tea Press
Needham, Massachusetts
目录
3
3
3
4
4
4
5
5
6
7
13
13
14
14
15
16
16
18
18
20
21
21
21
22
23
24
24
25
25
26
27
.
. . . . . . . . .
. . . . . .
. . . . . .
.
. . . .
.
. .
. .
. . . . . .
. . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
.
. .
.
.
.
. . . . . .
.
.
. .
. .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
0 译者序
0.1 为什么想要翻译一本书? . . . . .
0.2 为什么选择《Think Python》 . . . . .
0.3 为什么翻译 Python 3 版? . . . . .
0.4 贡献者 . .
. .
0.5 声明 .
.
. . . .
. . . . . . .
. . . . . . . . . .
. . . . .
.
.
.
.
.
.
.
. . . . . .
. . . . . . . . . .
. . .
. . . . . . . . . .
. . . . . .
. . .
. .
. . . . . .
. . . . . . . . . .
. . .
. . .
. . . . . . . . . . . . .
. . . . . .
. .
. . . . . . . . . . .
. . . . . .
. .
. . .
.
. .
.
1 前言
1.1 本书与众不同的历史 . . . . .
1.2
1.3
Acknowledgments
Contributor List . . . . . . . . . . .
. . . . .
. . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . .
. . .
. . .
. . . .
. .
. . . . . . . . . . .
. . . .
. . . . . . . . . .
. .
2 第一章:程序之道
. . . . . . . . . .
. . . . . . . . . .
. .
. . .
. . . . . . . . . . .
. . .
. . . . . .
. . . . . . . . . .
. . .
. . . . . . .
. . . . . . .
.
2.1 什么是程序? .
2.2 运行 Python . .
.
2.3 第一个程序 . .
.
2.4 算术运算符 . .
2.5 值和类型 . .
.
.
2.6 形式语言和自然语言 . . . . .
2.7 调试 .
. .
2.8 术语表 . .
2.9 练习题 . .
. . . . . . .
. . . . . . .
. . . .
.
.
. . . . . . . .
.
.
.
.
.
.
.
.
.
.
. . . . .
. . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . .
. . . .
. . . . .
. . . . . .
. . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . .
. . .
. . . . . . . . . . .
. .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
3 第二章:变量、表达式和语句
.
.
.
3.1 赋值语句 . .
.
3.2 变量名 . .
.
3.3 表达式和语句 .
.
.
3.4 脚本模式 . .
.
3.5 运算顺序 . .
.
3.6 字符串运算 . .
.
.
.
. .
3.7 注释 .
.
.
3.8 调试 .
. .
.
.
3.9 术语表 . .
3.10 练习题 . .
.
.
.
.
.
.
.
.
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . .
.
.
. . . . . . . . . .
.
.
. . . . . . .
. . . .
. . . .
.
.
. . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . .
. .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . . . . . .
. . . .
. . . . . . . . . .
. . . . . . . . . .
. .
. .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
4 第三章:函数
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . .
.
.
.
.
.
.
.
4.1 函数调用 . .
.
.
4.2 数学函数 . .
.
.
4.3 组合 .
.
.
.
4.4 新建函数 . .
.
.
4.5 定义和使用 . .
.
4.6 执行流程 . .
.
4.7 形参和实参 . .
.
4.8 变量和形参都是局部的 . .
4.9 堆栈图 . .
.
4.10 有返回值函数和无返回值函数 . . . . .
. . . . . . .
4.11 为什么写函数? .
4.12 调试 .
.
. . . . .
. .
.
.
4.13 术语表 . .
4.14 练习题 . .
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . .
. . . . . . . . .
. . . . . . . .
. . .
. . .
. . . . . . . . .
. . . . . . . . .
. . .
. . . . . .
. . . . .
. . .
. . .
. . .
. . .
. . .
. . . .
. . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.
.
.
.
. . . . . . . . . . . . .
.
. . . . . . . . . . . . .
. . . .
. . . . . .
. .
. . .
. . . .
.
. .
. .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . .
. . .
. .
. . .
. . . . . . . . . .
. . . . . . . .
. . . .
. . .
. . .
. . . .
. . .
. . .
. . .
. . . .
. . .
. . . . . . . .
.
.
.
. .
. .
. .
5 第四章:案例研究:接口设计
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5.1
turtle 模块 . .
5.2 简单的重复 . .
.
.
5.3 练习 .
.
5.4 封装 .
.
.
5.5 泛化 .
.
.
5.6 接口设计 . .
.
5.7 重构 .
.
5.8 开发方案 . .
.
5.9 文档字符串 . .
.
5.10 调试 .
. .
.
5.11 术语表 . .
5.12 练习题 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
6 第五章:条件和递归
.
.
.
6.1 地板除和求余 . .
.
6.2 布尔表达式 . .
.
.
6.3 逻辑运算符 . .
.
.
6.4 有条件的执行 . .
.
.
6.5 二选一执行 . .
.
.
.
6.6 链式条件 . .
.
6.7 嵌套条件 . .
.
.
6.8 递归 .
.
.
.
.
6.9 递归函数的堆栈图 .
.
6.10 无限递归 . .
6.11 键盘输入 . .
.
.
.
6.12 调试 .
. .
.
.
6.13 术语表 . .
6.14 练习题 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
7 第六章:有返回值的函数
.
.
.
7.1 返回值 . .
.
7.2 增量式开发 . .
7.3 组合 .
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . .
. . . . .
. . . . .
.
. . . . .
.
.
. . . . .
.
.
. . . . . . . . . .
. . .
. . . . . . . .
. . .
. . .
. . . . . . . . . .
. . . . . . .
. . . .
. . . . . . . .
. . .
. . .
. . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . .
. . . .
. . . .
. . .
. . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
.
.
.
.
.
.
. . . . . . . . . . . . .
.
. .
. .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . .
. . . .
. . . .
. . .
. . . .
. . .
. . . .
. . .
. . .
. . . . .
. . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . .
. . . .
. . .
. . .
. . . . . .
.
.
. . . . . .
.
.
.
. . . . .
. . . .
.
.
. . . . .
.
.
. . . .
. . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . .
. . .
. . .
. . .
. . .
. . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . .
. . .
. . . . . . . .
. . .
. . .
. . . . . . . . .
. . . . . . . . .
. . .
. . .
. . . .
. . .
. . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . .
.
.
.
. . . . . . .
.
.
.
. .
. .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . .
. . . . . . . . .
. . . . . . .
.
.
. . . . .
. . .
. . .
. . . .
. . .
. . . . . . . .
. . . .
. . . . . . . . . .
. .
. . . . . . . . . . . . .
.
. . . . . . . . . .
29
29
30
31
31
32
33
33
34
35
36
37
37
37
39
41
41
42
43
44
44
45
46
47
47
47
48
49
51
51
52
52
53
53
53
54
55
56
56
57
58
59
60
63
63
64
66
7.4 布尔函数 . .
7.5 再谈递归 . .
7.6 信仰之跃 . .
7.7 再举一例 . .
7.8 检查类型 . .
.
7.9 调试 .
. .
.
7.10 术语表 . .
7.11 练习题 . .
.
.
.
.
.
.
.
.
.
.
8 第七章:迭代
.
8.1 重新赋值 . .
8.2 更新变量 . .
8.3
8.4
8.5 平方根 . .
. .
8.6 算法 .
8.7 调试 .
. .
8.8 术语表 . .
8.9 练习题 . .
.
.
while 语句 . .
.
break .
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . .
.
.
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . .
.
.
.
.
.
.
. .
. .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . .
. . . . .
. . . . . . . . . . . .
. . . . . . . . .
. . . .
. . . .
. . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. .
. .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . . . . .
.
.
. . . . . . .
. .
.
. . . .
. . . .
.
.
. . . . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . .
.
.
. . . . . .
. . . . . .
. .
.
.
. .
. .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
9 第八章:字符串
.
.
.
.
.
.
.
.
. .
. . .
len . .
. . . . . . .
9.1 字符串是一个序列 . . . . .
9.2
9.3 使用 for 循环遍历 . . . . .
9.4 字符串切片 . .
9.5 字符串是不可变的 . . . . .
9.6 搜索 .
.
9.7 循环和计数 . .
9.8 字符串方法 . .
9.9
.
9.10 字符串比较 . .
.
9.11 调试 .
. .
.
9.12 术语表 . .
9.13 练习题 . .
.
. . . .
. . . . . . .
. . . . . . .
.
. . . . . . .
. . . .
.
.
in 运算符 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . .
. . . . . . .
. . . . . .
. . . . . . . . . .
. .
. . . . . . . . . .
. . .
. . .
. . . . . . . . . .
. . . . . .
. . . . .
. . . . . .
. . . . . . . . . .
. .
. . . . . . . . . . . .
. .
. . . . . . . . . .
. . . . . . . . . .
. .
. . . . . . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . .
. . . . . . . . . .
. .
. . . . . . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . . . . . .
. . . . .
. . . . . . . . . .
. . . .
. . . . . .
. . . . . . . . . .
.
. . . . . .
. . . . . .
.
. . . . . .
.
. .
. .
. . . . . .
. . . . . .
. . . .
. . . .
. . . . . .
. . . . . .
. . . .
66
67
69
69
69
70
71
72
75
75
76
76
77
78
79
80
80
81
83
83
84
84
85
86
86
87
87
88
89
89
91
91
10 第九章:文字游戏
. . . . . . . . . .
. . . .
. . . .
. . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
. .
. .
10.1 读取单词列表 .
10.2 练习 .
.
10.3 搜索 .
.
10.4 使用索引进行循环 . . . . .
10.5 调试 .
. .
10.6 术语表 . .
10.7 练习题 . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . .
. . . . . . .
. . . . . . . . . .
. .
. .
. .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . .
.
.
.
. . . . . . . . . .
.
. . . . . .
. .
. . . . . .
. . . . . . . . . .
. . . . . . . . . .
. .
. . . . . . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . .
95
95
96
97
98
99
. . 100
. . 100
11 第十章:列表
. . . . . .
11.1 列表是一个序列 . . . . .
11.2 列表是可变的 .
.
11.3 遍历列表 . .
.
11.4 列表操作 . .
11.5 列表切片 . .
.
.
11.6 列表方法 . .
. . . . . . . . . .
.
.
.
.
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
.
.
.
.
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . . . .
. .
. . . . . . . . . .
. .
103
. . . . . . . . . . . 103
. 103
. 105
. 105
. 105
. 106
. . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
.
.
11.7 映射、筛选和归并 .
.
11.8 删除元素 . .
.
.
11.9 列表和字符串 . .
.
.
11.10 对象和值 . .
11.11 别名 .
.
.
.
.
.
11.12 列表参数 . .
.
.
.
11.13 调试 .
. .
.
.
.
11.14 术语表 . .
11.15 练习题 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12 第十一章:字典
.
.
.
.
.
12.1 字典即映射 . .
.
12.2 字典作为计数器集合 . .
.
12.3 循环和字典 . .
.
12.4 逆向查找 . .
.
.
12.5 字典和列表 . .
.
12.6 备忘录 . .
.
.
.
.
12.7 全局变量 . .
.
.
.
12.8 调试 .
. .
.
.
.
12.9 术语表 . .
12.10 练习题 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13 第十二章:元组
.
.
.
13.1 元组是不可变的 .
.
13.2 元组赋值 . .
.
13.3 元组作为返回值 .
.
13.4 可变长度参数元组 .
.
13.5 列表和元组 . .
.
13.6 字典和元组 . .
13.7 序列嵌套 . .
.
.
.
.
.
13.8 调试 .
. .
.
.
.
13.9 术语表 . .
13.10 练习题 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . .
. . . . . . . . . .
. . .
. . .
. . . . . . . . . . . . .
. . .
. . . .
.
. . . . . .
.
. . . . .
.
. . . . .
.
.
. . . . . . . .
. . . . . . . . . .
. . .
. . . . . . . .
. . .
. . .
. . . . . . . . .
. . . . . . . . .
. . .
. . . . . . . . . .
. . . . . . . 107
. 108
. . . . 108
. 109
. 110
. 111
. 113
. . 114
. . 115
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . .
. . . .
. . .
. . . .
. . .
. . .
. . .
. . . .
. . . . . . . . . .
. . . .
. . .
. . .
. . .
. . .
. . . . . . .
. . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . .
.
. .
.
.
.
.
.
. . . . .
.
.
. . . . . . . . .
. . . . . . . . .
. . . . . . . .
. . .
. . .
. . . .
. . .
. . .
. . .
. . .
. . . . . . . . . .
119
. . . . . . . . . . . . . 119
. . . . 120
. . . . . . . . . . . . . 121
. 122
. . . . . . . . . . . . . 123
. . 124
. 125
. 127
. . 127
. . 129
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . .
. . .
. . . .
. . .
. . .
. . . . .
. . . . . . . .
. . . . . . . . . .
. . .
. . .
. . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . . .
.
. . . . . . .
. . . .
.
.
.
. . . . .
.
.
. . . . . . .
. . . . . . .
. . . . . . . . . .
. . . .
. . . .
. . . . . . . .
. . .
. . .
. . . . . . . . .
. . . . . . . . .
. . .
. . .
. . .
. . .
. . . .
. . . .
. . . . . . . . . .
131
. . . . 131
. 132
. . . . 133
. . . . . . . 134
. . . . . . . . . . . . . 134
. . . . . . . . . . . . . 136
. 137
. 138
. . 139
. . 139
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . .
. . . .
. . .
. . .
.
.
.
.
.
.
.
14 第十三章:案例研究:数据结构选择
.
.
.
.
.
.
.
. . . . . .
.
. . . . .
.
.
.
.
14.1 词频分析 . .
.
14.2 随机数 . .
.
.
.
14.3 单词直方图 . .
.
14.4 最常用单词 . .
.
.
14.5 可选形参 . .
.
.
14.6 字典差集 . .
.
14.7 随机单词 . .
.
14.8 马尔科夫分析 . .
.
14.9 数据结构 . .
.
.
14.10 调试 .
. .
14.11 术语表 . .
.
.
.
.
14.12 练习题 . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . . . . . . . . .
. . . . . . . . . .
143
. 143
. . 144
. . . . . . . . . . . . . 145
. . . . . . . . . . . . . 146
. 147
. 147
. 148
. . . . 149
. 150
. 151
. . 152
. . 153
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . .
. . .
. . .
. . . . . . . . . . . . .
. . .
. . .
. . . .
. . .
. . .
. . .
. . .
. . .
. . .
. . . .
. . . .
15 第十四章:文件
.
15.1 持久化 . .
15.2 读取和写入 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . .
. . . . . . .
. . . .
. . .
. . .
. . .
155
. . 155
. . . . . . . . . . . . . 155
. . . . . . . . . .
15.3 格式化运算符 .
15.4 文件名和路径 .
.
15.5 捕获异常 . .
.
.
15.6 数据库 . .
15.7 序列化 . .
.
.
.
15.8 管道 .
.
. .
.
15.9 编写模块 . .
.
.
15.10 调试 .
. .
15.11 术语表 . .
.
.
.
.
15.12 练习题 . .
.
.
.
.
.
.
.
.
.
.
. . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.
.
.
. . . .
.
. . . .
.
.
. . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. .
. .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . . . . . .
. . . . .
. . . . . . . . . .
. .
. . . . . . . . . . .
. . . . . . . . . . . . .
. .
. . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . .
. 156
. 157
. 158
. . 159
. . 160
. 160
. 161
. 162
. . 163
. . 164
16 第十五章:类和对象
.
.
.
.
.
.
.
.
. .
. .
. . . .
. . . .
16.1 程序员自定义类型 . . . . .
16.2 属性 .
16.3 矩形 .
16.4 实例作为返回值 . . . . .
16.5 对象是可变的 .
.
. .
16.6 复制 .
.
16.7 调试 .
. .
.
16.8 术语表 . .
16.9 练习题 . .
.
. . . . . . . . . .
. . . .
. . . .
.
.
. . . . . . .
. . . . . . .
.
.
.
.
.
.
.
.
.
.
. . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. .
. .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . .
. .
. . . . . . . . . .
. .
. . . . . . . . . .
. . . . . . . . . .
. .
. .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. .
. . . . . .
. . . . . .
165
. . . . . . . . . . 165
. 166
. 167
. . . . . . . . . . . 168
. 168
. 169
. 170
. . 171
. . 172
. . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
.
.
.
.
17 第十六章:类和函数
.
.
.
.
17.1 时间 .
. .
.
17.2 纯函数 . .
17.3 修改器 . .
.
17.4 原型 vs. 方案 . .
.
17.5 调试 .
. .
.
17.6 术语表 . .
17.7 练习题 . .
.
.
.
.
.
.
.
.
. . . .
.
.
. . .
. . . .
.
.
. . . . . . . . . .
. .
. . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . . . . . .
. . .
. . .
. . . . . . . . . .
. .
. . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
175
. 175
. . 176
. . 177
. . . . . . . . . 178
. 179
. . 179
. . 180
. . . . . .
. . . . . .
. . . . . .
18 第十七章:类和方法
. . . . . . . . . .
. .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . .
. .
. . . . . . . . . . . . .
. . . . . . . . . .
. . .
. . .
. . . . . . . . . . . .
.
.
.
.
.
.
.
.
. . . . . .
. . . . . .
. . . . . . .
. . . . .
. . . . .
. . . . . . . .
. . . . . . . .
init 方法 . .
.
__str__ 方法 . .
.
18.1 面向对象的特性 . . . . .
18.2 打印对象 . .
18.3 再举一例 . .
18.4 一个更复杂的例子 . . . . .
18.5
18.6
18.7 运算符重载 . .
18.8 类型分发(type-based dispatch) . . . . .
18.9 多态性 . .
.
18.10 接口和实现 . .
.
18.11 调试 .
. .
.
18.12 术语表 . .
18.13 练习题 . .
.
.
. . . . . . .
. . . .
.
.
.
. . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . .
. . . . .
. . . . . . .
. . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
. . . . . .
. . . . . .
. . . . . .
183
. . . . . . . . . . . 183
. 184
. 185
. . . . . . . . . . 185
. . 186
. . . . . . . . . 187
. . . . . . 187
. . . 188
. . 189
. . . . . . 190
. 190
. . 191
. . 191
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . .
. . . .
. . . . . .
. . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . .
. .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
19 第十八章:继承
19.1 卡牌对象 . .
19.2 类属性 . .
.
19.3 比较卡牌 . .
.
19.4 一副牌 . .
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . .
193
. 193
. . 194
. 195
. . 196
. . . . . . .
. . . .
. . . . . . . .
.
.
.
.
.
.
.
.
.
.
. .
. .
19.5 打印一副牌 . .
19.6 添加,移除,洗牌和排序 . . . . .
.
19.7 继承 .
19.8 类图 .
.
19.9 数据封装 . .
.
19.10 调试 .
. .
.
19.11 术语表 . .
19.12 练习题 . .
.
. . . . .
. . . . .
.
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . .
. . . . . . . .
. . .
. . .
. . . . . . . . .
. . . . . . . . .
. . .
. . . . .
. . . .
. . . .
. . .
. . . .
. . .
. . .
. . . . . . . . . . . . . 196
. . . . . . . . . . . 197
. 198
. . . . . . . . . .
. 199
. . . . . . . . . .
. . . . . . . . . .
. 200
. 201
. . . . . . . . . .
. . 202
. . 203
. . . . . . . . . .
. . . . . . . . . .
. . . .
. . . .
. . .
. . .
. . . . .
. . . . . . . . . .
. . . . . . . . . . . . .
. . .
. . .
. . . .
. . .
. . . . . . . .
. . .
. . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . .
. . .
. . .
. . .
. . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
205
. . . . . . . . . . . . . 205
. . . . . . . . . . . . . 206
. . . . 207
. 207
. 208
. . 209
. . . . . . . . . . . . . 210
. 211
. . . . 212
. . 213
. . 214
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . .
. . . . . . .
. . . . . . .
.
.
. . . . . .
.
. . . . .
.
.
.
. . . . . . .
.
.
. . . . . . . . .
. . . . . . . . .
. . .
. . .
. . .
. . .
20 第十九章:进阶小技巧
.
.
20.1 条件表达式 . .
20.2 列表推导式 . .
.
.
20.3 生成器表达式 . .
.
20.4
.
20.5 集合 .
. .
.
20.6 计数器 . .
20.7
defaultdict
.
20.8 命名元组 . .
.
20.9 汇集关键字实参 .
.
20.10 术语表 . .
20.11 练习题 . .
.
.
any 和 all . .
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
21 第二十章:调试
21.1 语法错误 . .
.
21.2 运行时错误 . .
.
21.3 语义错误 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22 第二十一章:算法分析
.
.
22.1 增长量级 . .
22.2
22.3 搜索算法分析 . .
.
22.4 哈希表 . .
22.5 术语表 . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Python 基本运算操作分析 . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . .
. . .
. . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . .
. . .
. . .
. . .
. . .
. . .
. . . . . . . . . .
215
. 215
. . . . . . . . . . . . . 216
. 219
. . . . . . . . . .
. . . . .
. . . . . .
.
.
. . . . . . . . .
. . . . . . . . .
. . .
. . .
. . .
. . .
. . . . . . . . . . . . .
. . . . . . . . . .
223
. 224
. . . . . . . . . . 225
. . . . 226
. . 227
. . 230
. . . . . . . . . .
. . . . . . . . . .