第1章 快速上手:基础知识 1
1.1交互式解释器 1
1.2算法是什么 2
1.3数和表达式 3
1.4变量 5
1.5语句 5
1.6获取用户输入 7
1.7函数 8
1.8模块 8
1.8.1 cmath和复数 9
1.8.2回到未来 10
1.9保存并执行程序 10
1.9.1从命令提示符运行Python脚本 12
1.9.2让脚本像普通程序一样 12
1.9.3注释 13
1.10字符串 13
1.10.1单引号字符串以及对引号转义 14
1.10.2拼接字符串 15
1.10.3字符串表示str和repr 15
1.10.4长字符串、原始字符串和字节 16
1.11小结 21
1.11.1本章介绍的新函数 21
1.11.2预告 22
第2章 列表和元组 23
2.1序列概述 23
2.2通用的序列操作 24
2.2.1索引 24
2.2.2切片 26
2.2.3序列相加 28
2.2.4乘法 28
2.2.5成员资格 29
2.3列表:Python的主力 31
2.3.1函数list 31
2.3.2基本的列表操作 31
2.3.3列表方法 33
2.4元组:不可修改的序列 38
2.5小结 39
2.5.1本章介绍的新函数 40
2.5.2预告 40
第3章 使用字符串 41
3.1字符串基本操作 41
3.2设置字符串的格式:精简版 41
3.3设置字符串的格式:完整版 43
3.3.1替换字段名 43
3.3.2基本转换 44
3.3.3宽度、精度和千位分隔符 45
3.3.4符号、对齐和用0填充 46
3.4字符串方法 48
3.4.1 center 48
3.4.2 find 48
3.4.3 join 49
3.4.4 lower 50
3.4.5 replace 51
3.4.6 split 51
3.4.7 strip 51
3.4.8 translate 52
3.4.9判断字符串是否满足特定的条件 52
3.5小结 53
3.5.1本章介绍的新函数 53
3.5.2预告 53
第4章 当索引行不通时 54
4.1字典的用途 54
4.2创建和使用字典 55
4.2.1函数dict 55
4.2.2基本的字典操作 55
4.2.3将字符串格式设置功能用于字典 57
4.2.4字典方法 58
4.3小结 63
4.3.1本章介绍的新函数 63
4.3.2预告 63
第5章 条件、循环及其他语句 64
5.1再谈print和import 64
5.1.1打印多个参数 64
5.1.2导入时重命名 65
5.2赋值魔法 66
5.2.1序列解包 66
5.2.2链式赋值 67
5.2.3增强赋值 67
5.3代码块:缩进的乐趣 68
5.4条件和条件语句 69
5.4.1这正是布尔值的用武之地 69
5.4.2有条件地执行和if语句 70
5.4.3 else子句 70
5.4.4 elif子句 71
5.4.5代码块嵌套 71
5.4.6更复杂的条件 71
5.4.7断言 75
5.5循环 76
5.5.1 while循环 77
5.5.2 for循环 77
5.5.3迭代字典 78
5.5.4一些迭代工具 78
5.5.5跳出循环 80
5.5.6循环中的else子句 82
5.6简单推导 83
5.7三人行 84
5.7.1什么都不做 84
5.7.2使用del删除 85
5.7.3使用exec和eval执行字符串及计算其结果 86
5.8小结 88
5.8.1本章介绍的新函数 89
5.8.2预告 89
第6章 抽象 90
6.1懒惰是一种美德 90
6.2抽象和结构 91
6.3自定义函数 91
6.3.1给函数编写文档 92
6.3.2其实并不是函数的函数 93
6.4参数魔法 93
6.4.1值从哪里来 94
6.4.2我能修改参数吗 94
6.4.3关键字参数和默认值 98
6.4.4收集参数 100
6.4.5分配参数 102
6.4.6练习使用参数 103
6.5作用域 105
6.6递归 107
6.6.1两个经典案例:阶乘和幂 108
6.6.2另一个经典案例:二分查找 109
6.7小结 112
6.7.1本章介绍的新函数 113
6.7.2预告 113
第7章 再谈抽象 114
7.1对象魔法 114
7.1.1多态 115
7.1.2多态和方法 116
7.1.3封装 118
7.1.4继承 119
7.2类 119
7.2.1类到底是什么 119
7.2.2创建自定义类 120
7.2.3属性、函数和方法 121
7.2.4再谈隐藏 122
7.2.5类的命名空间 123
7.2.6指定超类 124
7.2.7深入探讨继承 125
7.2.8多个超类 126
7.2.9接口和内省 127
7.2.10抽象基类 128
7.3关于面向对象设计的一些思考 130
7.4小结 130
7.4.1本章介绍的新函数 131
7.4.2预告 131
第8章 异常 132
8.1异常是什么 132
8.2让事情沿你指定的轨道出错 132
8.2.1 raise语句 132
8.2.2自定义的异常类 133
8.3捕获异常 134
8.3.1不用提供参数 134
8.3.2多个except子句 136
8.3.3一箭双雕 136
8.3.4捕获对象 137
8.3.5一网打尽 137
8.3.6万事大吉时 138
8.3.7最后 139
8.4异常和函数 140
8.5异常之禅 140
8.6不那么异常的情况 142
8.7小结 143
8.7.1本章介绍的新函数 143
8.7.2预告 143
第9章 魔法方法、特性和迭代器 144
9.1如果你使用的不是Python 3 144
9.2构造函数 145
9.2.1重写普通方法和特殊的构造函数 146
9.2.2调用未关联的超类构造函数 147
9.2.3使用函数super 148
9.3元素访问 149
9.3.1基本的序列和映射协议 150
9.3.2从list、 dict和str派生 152
9.4其他魔法方法 153
9.5特性 153
9.5.1函数property 154
9.5.2静态方法和类方法 155
9.5.3 __getattr___、__setattr___等方法 156
9.6迭代器 157
9.6.1迭代器协议 157
9.6.2从迭代器创建序列 159
9.7生成器 159
9.7.1创建生成器 159
9.7.2递归式生成器 161
9.7.3通用生成器 162
9.7.4生成器的方法 162
9.7.5模拟生成器 163
9.8八皇后问题 164
9.8.1生成器的回溯 164
9.8.2问题 165
9.8.3状态表示 166
9.8.4检测冲突 166
9.8.5基线条件 166
9.8.6递归条件 167
9.8.7扫尾工作 169
9.9小结 170
9.9.1本章介绍的新函数 170
9.9.2预告 171
第10章 开箱即用 172
10.1模块 172
10.1.1模块就是程序 172
10.1.2模块是用来下定义的 174
10.1.3让模块可用 176
10.1.4包 177
10.2探索模块 178
10.2.1模块包含什么 178
10.2.2使用help获取帮助 179
10.2.3文档 180
10.2.4使用源代码 181
10.3标准库:一些深受欢迎的模块 181
10.3.1 sys 181
10.3.2 os 183
10.3.3 fileinput 185
10.3.4集合、堆和双端队列 186
10.3.5 time 190
10.3.6 random 192
10.3.7 shelve和j son 195
10.3.8 re 198
10.3.9其他有趣的标准模块 210
10.4小结 211
10.4.1本章介绍的新函数 212
10.4.2预告 212
第11章 文件 213
11.1打开文件 213
11.2文件的基本方法 214
11.2.1读取和写入 215
11.2.2使用管道重定向输出 215
11.2.3读取和写入行 217
11.2.4关闭文件 217
11.2.5使用文件的基本方法 218
11.3迭代文件内容 220
11.3.1每次一个字符(或字节) 220
11.3.2每次一行 221
11.3.3读取所有内容 221
11.3.4使用fileinput实现延迟行迭代 221
11.3.5文件迭代器 222
11.4小结 223
11.4.1本章介绍的新函数 223
11.4.2预告 224
第12章 图形用户界面 225
12.1创建GUI示例应用程序 225
12.1.1初探 226
12.1.2布局 227
12.1.3事件处理 228
12.1.4最终的程序 229
12.2使用其他GUI工具包 230
12.3小结 231
第13章 数据库支持 232
13.1 Python数据库API 232
13.1.1全局变量 233
13.1.2异常 234
13.1.3连接和游标 234
13.1.4类型 236
13.2 SQLite和PySQLite 236
13.2.1起步 237
13.2.2数据库应用程序示例 238
13.3小结 241
13.3.1本章介绍的新函数 241
13.3.2预告 241
第14章 网络编程 242
14.1几个网络模块 242
14.1.1模块socket 242
14.1.2模块urllib和urllib2 244
14.1.3其他模块 246
14.2 SocketServer及相关的类 247
14.3多个连接 247
14.3.1使用SocketServer实现分叉和线程化 249
14.3.2使用select和poll实现异步I/O 249
14.4 Twisted 252
14.4.1下载并安装Twisted 252
14.4.2编写Twisted服务器 253
14.5小结 254
14.5.1本章介绍的新函数 255
14.5.2预告 255
第15章Python和Web 256
15.1屏幕抓取 256
15.1.1 Tidy和XHTML解析 257
15.1.2 Beautiful Soup 261
15.2使用CGI创建动态网页 262
15.2.1第一步:准备Web服务器 262
15.2.2第二步:添加!#行 263
15.2.3第三步:设置文件权限 264
15.2.4 CGI安全风险 264
15.2.5简单的CGI脚本 264
15.2.6使用cgitb进行调试 265
15.2.7使用模块cgi 266
15.2.8简单的表单 267
15.3使用Web框架 269
15.4 Web服务:更高级的抓取 270
15.4.1 RSS和相关内容 270
15.4.2使用XML-RPC进行远程过程调用 271
15.4.3 SOAP 272
15.5小结 272
15.5.1本章介绍的新函数 272
15.5.2预告 272
第16章 测试基础 273
16.1先测试再编码 273
16.1.1准确的需求说明 273
16.1.2做好应对变化的准备 275
16.1.3测试四步曲 275
16.2测试工具 276
16.2.1 doctest 276
16.2.2 unittest 278
16.3超越单元测试 280
16.3.1使用PyChecker和PyLint检查源代码 280
16.3.2性能分析 283
16.4小结 284
16.4.1本章介绍的新函数 285
16.4.2预告 285
第17章 扩展Python 286
17.1鱼和熊掌兼得 286
17.2简单易行的方式:Jython和IronPython 287
17.3编写C语言扩展 289
17.3.1 SWIG 291
17.3.2手工编写扩展 294
17.4小结 298
17.4.1本章介绍的新函数 299
17.4.2预告 299
第18章 程序打包 300
18.1 Setuptools基础 300
18.2打包 302
18.3编译扩展 303
18.4使用py2exe创建可执行程序 304
18.5小结 304
18.5.1本章介绍的新函数 305
18.5.2预告 305
第19章 趣味编程 306
19.1为何要有趣 306
19.2编程柔术 306
19.3原型设计 307
19.4配置 308
19.4.1提取常量 308
19.4.2配置文件 309
19.5日志 311
19.6如果你已不胜其烦 312
19.7如果你想深入学习 312
19.8小结 313
第20章 项目1:自动添加标签 315
20.1问题描述 315
20.2有用的工具 316
20.3准备工作 316
20.4初次实现 317
20.4.1找出文本块 317
20.4.2添加一些标记 318
20.5再次实现 319
20.5.1处理程序 320
20.5.2处理程序的超类 320
20.5.3规则 322
20.5.4规则的超类 323
20.5.5过滤器 323
20.5.6解析器 323
20.5.7创建规则和过滤器 324
20.5.8整合起来 327
20.6进一步探索 331
第21章 项目2:绘制图表 332
21.1问题描述 332
21.2有用的工具 332
21.3准备工作 333
21.4初次实现 333
21.4.1使用ReportLab绘图 334
21.4.2绘制折线 335
21.4.3编写原型 335
21.5再次实现 337
21.5.1获取数据 337
21.5.2 使用Lineplot类 337
21.6进一步探索 339
第22章 项目3:万能的XM L 340
22.1问题描述 340
22.2有用的工具 341
22.3准备工作 341
22.4初次实现 343
22.4.1创建简单的内容处理程序 343
22.4.2创建HTML页面 345
22.5再次实现 347
22.5.1分派器混合类 347
22.5.2将首部和尾部写入文件的方法以及默认处理程序 349
22.5.3支持目录 349
22.5.4事件处理程序 350
22.6进一步探索 352
第23章 项目4:新闻汇总 353
23.1问题描述 353
23.2有用的工具 354
23.3准备工作 354
23.4初次实现 354
23.5再次实现 356
23.6进一步探索 362
第24章 项目5:虚拟茶话会 364
24.1问题描述 364
24.2有用的工具 364
24.3准备工作 365
24.4初次实现 366
24.4.1 ChatServer类 366
24.4.2 ChatSession类 367
24.4.3整合起来 369
24.5再次实现 371
24.5.1基本的命令解释功能 371
24.5.2聊天室 372
24.5.3登录和退出聊天室 372
24.5.4主聊天室 373
24.5.5新的服务器 373
24.6进一步探索 378
第25章 项目6:使用CGI进行远程编辑 379
25.1问题描述 379
25.2有用的工具 379
25.3准备工作 380
25.4初次实现 380
25.5再次实现 381
25.5.1创建文件名表单 381
25.5.2编写编辑器脚本 382
25.5.3编写保存脚本 383
25.5.4运行编辑器 384
25.6进一步探索 386
第26章 项目7:自建公告板 387
26.1问题描述 387
26.2有用的工具 387
26.3准备工作 388
26.4初次实现 389
26.5再次实现 393
26.5.1编写脚本main.cgi 394
26.5.2编写脚本view.cgi 395
26.5.3编写脚本edit.cgi 396
26.5.4编写脚本save.cgi 398
26.5.5尝试使用 399
26.6进一步探索 400
第27章 项目8:使用XML-RPC共享文件 401
27.1问题描述 401
27.2有用的工具 402
27.3准备工作 403
27.4初次实现 403
27.4.1实现简单的节点 403
27.4.2尝试使用 408
27.5再次实现 409
27.5.1创建客户端界面 410
27.5.2引发异常 410
27.5.3验证文件名 411
27.5.4尝试使用 415
27.6进一步探索 415
第28章 项目9:使用GUI共享文件 417
28.1问题描述 417
28.2有用的工具 417
28.3准备工作 417
28.4初次实现 417
28.5再次实现 419
28.6进一步探索 422
第29章 项目10:自制街机游戏 423
29.1问题描述 423
29.2有用的工具 424
29.2.1 pygame 424
29.2.2 pygame.locals 424
29.2.3 pygame.display 424
29.2.4 pygame.font 425
29.2.5 pygame.sprite 425
29.2.6 pygame.mouse 425
29.2.7 pygame.event 425
29.2.8 pygame.image 426
29.3准备工作 426
29.4初次实现 426
29.5再次实现 429
29.6进一步探索 438
附录A简明教程 440
附录B Python参考手册 447