第1章 准备工作 1
1.1安装Python 1
1.1.1 Python实现版本 2
1.1.2在Linux环境下安装 3
1.1.3在Windows环境下安装 5
1.1.4在Mac OS X环境下安装 8
1.2 Python命令行 9
1.2.1定制交互式命令行 10
1.2.2 iPython:增强型命令行 11
1.3安装setuptools 12
1.3.1工作原理 12
1.3.2使用EasyInstall安装setuptools 13
1.3.3将MinGW整合到distutils中 15
1.4工作环境 15
1.4.1使用文本编辑器与辅助工具的组合 15
1.4.2使用集成开发环境 19
1.5小结 22
第2章 语法最佳实践——低于类级 23
2.1列表推导 24
2.2迭代器和生成器 25
2.2.1生成器 27
2.2.2协同程序 31
2.2.3生成器表达式 33
2.2.4 itertools模块 34
2.3装饰器 37
2.3.1如何编写装饰器 39
2.3.2参数检查 40
2.3.3缓存 42
2.3.4代理 45
2.3.5上下文提供者 46
2.4 with和contextlib 47
2.4.1 contextlib模块 49
2.4.2上下文实例 50
2.5小结 52
第3章 语法最佳实践——类级 53
3.1子类化内建类型 53
3.2访问超类中的方法 55
3.2.1理解Python的方法解析顺序 56
3.2.2 super的缺陷 60
3.3最佳实践 63
3.4描述符和属性 64
3.4.1描述符 65
3.4.2属性 71
3.5槽 74
3.6元编程 75
3.6.1 new方法 75
3.6.2 metaclass方法 77
3.7小结 80
第4章 选择好的名称 81
4.1 PEP 8和命名最佳实践 81
4.2命名风格 82
4.2.1变量 82
4.2.2函数和方法 86
4.2.3属性 88
4.2.4类 89
4.2.5模块和包 89
4.3命名指南 90
4.3.1使用“has”或“is”前缀命名布尔元素 90
4.3.2用复数形式命名序列元素 90
4.3.3用显式的名称命名字典 90
4.3.4避免通用名称 91
4.3.5避免现有名称 91
4.4参数最佳实践 92
4.4.1根据迭代设计构建参数 92
4.4.2信任参数和测试 93
4.4.3小心使用*args和**kw魔法参数 94
4.5类名 96
4.6模块和包名称 96
4.7使用API 97
4.7.1跟踪冗长 97
4.7.2构建命名空间树 98
4.7.3分解代码 100
4.7.4使用Egg 101
4.7.5使用deprecation过程 101
4.8有用的工具 102
4.8.1 Pylint 103
4.8.2 CloneDigger 104
4.9小结 105
第5章 编写一个包 106
5.1用于所有包的公共模式 106
5.2基于模板的方法 118
5.2.1 Python Paste 118
5.2.2创建模板 120
5.3创建包模板 120
5.4开发周期 125
5.5小结 128
第6章 编写一个应用程序 129
6.1 Atomisator概述 129
6.2整体描述 130
6.3工作环境 131
6.3.1添加一个测试运行程序 133
6.3.2添加一个包结构 133
6.4编写各个包 134
6.4.1 atomisator.parser 134
6.4.2 atomisator.db 139
6.4.3 atomisator.feed 143
6.4.4 atomisator.main 145
6.5分发Atomisator 147
6.6包之间的依赖性 148
6.7小结 149
第7章 使用zc.buildout 150
7.1 zc.buildout原理 151
7.1.1配置文件结构 151
7.1.2 buildout命令 152
7.1.3 recipe 154
7.1.4 Atomisator buildout环境 157
7.1.5更进一步 158
7.2发行与分发 159
7.2.1发行包 160
7.2.2添加一个发行配置文件 160
7.2.3构建和发行应用程序 161
7.3小结 162
第8章 代码管理 163
8.1版本控制系统 163
8.1.1集中式系统 163
8.1.2分布式系统 165
8.1.3集中还是分布 167
8.1.4 Mercurial 167
8.1.5使用Mercurial进行项目管理 171
8.2持续集成 178
8.3小结 183
第9章 生命周期管理 184
9.1不同的方法 184
9.1.1瀑布开发模型 184
9.1.2螺旋开发模型 185
9.1.3迭代开发模型 185
9.2定义生命周期 187
9.2.1计划 188
9.2.2开发 188
9.2.3整体调试 188
9.2.4发行 188
9.3建立一个跟踪系统 189
9.3.1 Trac 189
9.3.2使用Trac管理项目生命周期 194
9.4小结 196
第10章 编写项目文档 197
10.1技术性写作的7条规则 197
10.1.1分两步编写 198
10.1.2以读者为目标 199
10.1.3使用简单的风格 199
10.1.4限制信息的范围 200
10.1.5使用真实的代码示例 200
10.1.6保持简单,够用即可 201
10.1.7使用模板 202
10.2 reStructuredText入门 202
10.2.1小节结构 204
10.2.2列表 205
10.2.3内联标签 205
10.2.4文字块 206
10.2.5链接 206
10.3构建文档 207
10.4建立自己的工件集 214
10.5小结 220
第11章 测试驱动开发 221
11.1我不测试 221
11.1.1测试驱动开发原理 221
11.1.2哪一类测试 225
11.2我测试 229
11.2.1 Unittest的缺陷 229
11.2.2 Unittest替代品 230
11.2.3仿真和模拟 236
11.2.4文档驱动开发 240
11.3小结 242
第12章 优化:通用原则和剖析技术 243
12.1优化的3条规则 243
12.1.1首先使它能够正常工作 243
12.1.2从用户的观点进行 244
12.1.3保持代码易读(从而易于维护) 245
12.2优化策略 245
12.2.1寻找其他原因 245
12.2.2度量硬件 246
12.2.3编写速度测试 246
12.3查找瓶颈 247
12.3.1剖析CPU的使用情况 247
12.3.2剖析内存使用情况 256
12.3.3剖析网络使用情况 262
12.4小结 263
第13章 优化:解决方案 264
13.1降低复杂度 265
13.1.1测量回路复杂度 265
13.1.2测量大O记号 265
13.1.3简化 268
13.2多线程 274
13.2.1什么是多线程 274
13.2.2 Python处理线程的方式 274
13.2.3什么时候应该使用线程 275
13.3多进程 280
13.4缓存 284
13.4.1确定性缓存 284
13.4.2非确定性缓冲 287
13.4.3主动式缓冲 288
13.5小结 289
第14章 有用的设计模式 290
14.1创建型模式 290
14.2结构型模式 293
14.3行为型模式 299
14.3.1观察者 299
14.3.2访问者 301
14.3.3模板 304
14.4小结 306