第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和json 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:万能的XML 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
      · · · · · ·     (
收起)