Magnus Lie Hetland
挪威科技大学副教授,教授算法;黑客,喜欢钻研新锐编程语言,是Python语言的坚定支持者。写过很多Python方面的书和在线教程,比如深受读者欢迎的网上教程"Instant Python”。表演专业的业余爱好者,从1985年首次登台至今,已经参演数十部话剧。
目录
第1章 快速上手:基础知识 1
1.1 交互式解释器1
1.2 算法是什么2
1.3 数和表达式3
1.4 变量5
1.5 语句5
· · · · · · (更多)
第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和repr15
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 函数list31
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 center48
3.4.2 find48
3.4.3 join49
3.4.4 lower50
3.4.5 replace51
3.4.6 split51
3.4.7 strip51
3.4.8 translate52
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 函数dict55
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和import64
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 3144
9.2 构造函数145
9.2.1 重写普通方法和特殊的构造函数146
9.2.2 调用未关联的超类构造函数147
9.2.3 使用函数super148
9.3 元素访问149
9.3.1 基本的序列和映射协议150
9.3.2 从list、dict和str派生152
9.4 其他魔法方法153
9.5 特性153
9.5.1 函数property154
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 sys181
10.3.2 os183
10.3.3 fileinput185
10.3.4 集合、堆和双端队列186
10.3.5 time190
10.3.6 random192
10.3.7 shelve和json195
10.3.8 re198
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数据库API232
13.1.1 全局变量233
13.1.2 异常234
13.1.3 连接和游标234
13.1.4 类型236
13.2 SQLite和PySQLite236
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 模块socket242
14.1.2 模块urllib和urllib2244
14.1.3 其他模块246
14.2 SocketServer及相关的类247
14.3 多个连接247
14.3.1 使用SocketServer实现分叉和线程化249
14.3.2 使用select和poll实现异步I/O249
14.4 Twisted252
14.4.1 下载并安装Twisted252
14.4.2 编写Twisted服务器253
14.5 小结254
14.5.1 本章介绍的新函数255
14.5.2 预告255
第15章 Python和Web256
15.1 屏幕抓取256
15.1.1 Tidy和XHTML解析257
15.1.2 Beautiful Soup261
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 使用模块cgi266
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 SOAP272
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 doctest276
16.2.2 unittest278
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章 扩展Python286
17.1 鱼和熊掌兼得286
17.2 简单易行的方式:Jython和IronPython287
17.3 编写C语言扩展289
17.3.1 SWIG291
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:万能的XML340
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.cgi394
26.5.2 编写脚本view.cgi395
26.5.3 编写脚本edit.cgi396
26.5.4 编写脚本save.cgi398
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 pygame424
29.2.2 pygame.locals424
29.2.3 pygame.display424
29.2.4 pygame.font425
29.2.5 pygame.sprite425
29.2.6 pygame.mouse425
29.2.7 pygame.event425
29.2.8 pygame.image426
29.3 准备工作426
29.4 初次实现426
29.5 再次实现429
29.6 进一步探索438
附录A 简明教程440
附录B Python参考手册447