前言 1
第一部分使用入门 19
第1章问答环节 19
人们为何使用Python 19
软件质量 20
开发者效率 21
Python是“脚本语言”吗 21
好吧,Python的缺点是什么呢 23
如今谁在使用Python 23
使用Python可以做些什么 24
系统编程 25
用户图形接口 25
Internet脚本 25
组件集成 26
数据库编程 26
快速原型 27
数值计算和科学计算编程 27
游戏、图像、人工智能、XML、机器人等 27
Python有哪些技术上的优点 27
面向对象 28
免费 28
可移植 28
功能强大 29
可混合 30
使用简单 31
Python是工程,不是艺术 31
简单易学 33
名字来源于Monty Python 33
Python和其他语言比较起来怎么样 33
本章小结 34
头脑风暴 35
本章习题 35
习题解答 35
第2章Python如何运行程序 37
Python解释器简介 37
程序执行 39
程序员的视角 39
Python的视角 40
执行模块的变种 42
Python实现的替代者 42
执行优化工具 44
冻结二进制文件 45
未来的可能性 46
本章小结 47
头脑风暴 48
本章习题 48
习题解答 48
第3章如何运行程序 49
交互模式下编写代码 49
在交互提示模式下测试代码 51
使用交互提示模式 52
系统命令行和文件 52
使用命令行和文件 55
UNIX可执行脚本(#!) 56
UNIX env查找技巧 57
点击文件图标 57
在Windows中点击图标 58
raw_ input的技巧 58
图标点击的其他限制 60
模块导入和重载 61
模块的显要特性:属性 62
import和reload的使用注意事项 65
IDLE用户界面 66
IDLE基础 66
使用IDLE 68
高级IDLE工具 70
其他的IDE 70
嵌入式调用 71
动付二进制的可执行性 72
文本编辑器启动的选择 72
其他的启动选择 73
未来的可能 73
我应该选用哪种 73
本章小结 74
头脑风暴 75
本章习题 75
习题解答 75
头脑风暴:第一部分练习题 77
第二部分类型和运算 81
第4章介绍Python对象类型 81
为什么使用内置类型 82
Python的核心数据类型 82
数字 84
字符串 85
序列的操作 85
不可变性 87
类型特定的方法 88
寻求帮助 89
编写字符串的其他方法 90
模式匹配 91
列表 91
序列操作 92
类型特定的操作 92
边界检查 93
嵌套 93
列表解析 94
字典 95
映射操作 95
重访嵌套 96
键的排序:for循环 97
迭代和优化 99
不存在的键:if测试 100
元组 101
为什么要用元组 101
文件 101
其他文件类工具 102
其他核心类型 103
如何破坏代码的灵活性 104
用户定义的类 104
剩余的内容 105
本章小结 106
头脑风暴 107
本章习题 107
习题解答 107
第5章数字 109
Python的数字类型 109
数字常量 109
内置数学工具和扩展 111
Python表达式操作符 112
混合操作所遵循的操作符优先级 113
括号分组的子表达式 113
混合类型自动升级 114
预习:运算符重载 115
在实际应用中的数字 115
变量和基本的表达式 115
数字显示的格式 117
str和repr显示格式 118
除法:传统除法、Floor除法和真除法 118
位操作 119
长整型数 120
复数 121
十六进制和八进制记数 121
其他的内置数学工具 122
其他数字类型 123
小数数字 124
集合 125
布尔型 126
第三方扩展 127
本章小结 127
头脑风暴 128
本章习题 128
习题解答 128
第6章动态类型简介 129
缺少类型声明语句的情况 129
变量、对象和引用 129
类型属于对象,而不是变量 131
对象的垃圾收集 132
共享引用 133
共享引用和在原处修改 135
共享引用和相等 136
动态类型随处可见 138
本章小结 138
头脑风暴 139
本章习题 139
习题解答 139
第7章字符串 140
字符串常量 141
单双引号字符串是一样的 142
用转义序列代表特殊字节 142
字符串抑制转义 145
三重引号编写多行字符串块 146
字符串编码更大的字符集 147
实际应用中的字符串 149
基本操作 149
索引和分片 151
为什么要在意:分片 154
字符串转换工具 154
修改字符串 157
字符串格式化 158
更高级的字符串格式化 159
基于字典的字符串格式化 160
字符串方法 161
字符串方法实例:修改字符串 162
字符串方法实例:文本解析 164
实际应用中的其他常见字符串方法 165
最初的字符串模块 166
通常意义下的类型分类 168
同样分类的类型共享其操作集合 168
可变类型能够在原处修改 168
本章小结 169
头脑风暴 170
本章习题 170
习题解答 170
第8章列表与字典 171
列表 171
实际应用中的列表 174
基本列表操作 174
索引、分片和矩阵 174
原处修改列表 175
字典 179
实际应用中的字典 181
字典的基本操作 181
原处修改字典 182
其他字典方法 183
语言表 184
字典用法注意事项 185
为什么要在意字典接口 189
本章小结 189
头脑风暴 190
本章习题 190
习题解答 190
第9章元组、文件及其他 191
元组 191
实际应用中的元组 192
为什么有了列表还要元组 194
文件 195
打开文件 195
使用文件 196
实际应用中的文件 197
其他文件工具 201
重访类型分类 201
为什么要在意操作符重载 202
对象灵活性 202
引用VS拷贝 204
比较、相等性和真值 206
Python中真和假的含义 207
Python的类型层次 209
Python中的其他类型 210
内置类型陷阱 210
赋值生成引用,而不是拷贝 210
重复能够增加层次深度 211
留意循环数据结构 212
不可变类型不可以在原处改变 212
本章小结 213
头脑风暴 214
本章习题 214
习题解答 214
头脑风暴:第二部分练习题 215
第三部分语句和语法 221
第10章Python语句简介 221
重访Python程序结构 221
Python的语句 222
两个if的故事 223
Python增加了什么 224
Python删除了什么 224
终止行就是终止语句 225
为什么使用缩进语法 226
几个特殊实例 228
简短实例:交互循环 230
一个简单的交互式循环 230
对用户输入数据做数学运算 231
用测试输入数据来处理错误 232
用try语句处理错误 233
嵌套代码三层 234
本章小结 235
头脑风暴 236
本章习题 236
习题解答 236
第11章赋值、表达式和打印 237
赋值语句 237
赋值语句的形式 238
序列赋值 239
多目标赋值语句 242
增强赋值语句 243
变量命名规则 245
表达式语句 248
表达式语句和在原处的修改 249
打印语句 249
Python的“Hello World”程序 250
重定向输出流 251
print>>file扩展 252
本章小结 253
头脑风暴 255
本章习题 255
习题解答 255
第12章if测试 256
if语句 256
通用格式 256
基本例子 257
多路分支 257
Python语法规则 259
代码块分隔符 260
语句的分隔符 261
一些特殊情况 262
真值测试 262
if/else三元表达式 264
为什么要在意布尔值 266
本章小结 267
头脑风暴 268
本章习题 268
习题解答 268
第13章while和for循环 269
while循环 269
一般格式 269
例子 270
break continue、 pass和循环else 271
一般循环格式 271
例子 271
为什么要在意“模拟C语言的while循环” 275
for循环 275
一般格式 276
例子 276
为什么要在意“文件扫描” 279
迭代器:初探 280
文件迭代器 281
其他内置类型迭代器 283
其他迭代环境 284
用户定义的迭代器 285
编写循环的技巧 285
循环计数器:while和range 286
非完备遍历:range 287
修改列表:range 288
并行遍历:zip和map 289
产生偏移和元素:enumerate 291
列表解析:初探 292
列表解析基础 293
对文件使用列表解析 294
扩展列表解析语法 295
本章小结 296
头脑风暴 297
本章习题 297
习题解答 297
第14章文档 299
Python文档资源 299
#注释 300
dir函数 300
文档字符串:__doc__ 301
PyDoc:help函数 304
PyDoc HTML报表 306
标准手册集 309
网络资源 310
已出版的书籍 311
常见编写代码的陷阱 311
本章小结 313
头脑风暴 314
本章习题 314
习题解答 314
头脑风暴:第三部分练习题 315
第四部分 函数 319
第15章函数基础 319
为何使用函数 320
编写函数 320
def语句 322
def语句是实时执行的 322
第一个例子:定义和调用 323
定义 323
调用 324
Python中的多态 324
第二个例子:寻找序列的交集 325
定义 326
调用 326
重访多态 327
本地变量 328
本章小结 328
头脑风暴 329
本章习题 329
习题解答 329
第16章作用域和参数 330
作用域法则 330
函数作用域基础 331
变量名解析:LEGB原则 332
作用域实例 334
内置作用域 334
global语句 336
最小化全局变量 337
最小化文件间的修改 338
其他访问全局变量的方法 339
作用域和嵌套函数 340
嵌套作用域的细节 341
嵌套作用域举例 341
传递参数 347
参数和共享引用 348
避免可变参数的修改 349
对参数输出进行模拟 350
特定的参数匹配模型 351
关键字参数和默认参数的实例 352
任意参数的实例 354
关键字参数和默认参数的混合 356
min调用 357
一个更有用的例子:通用set函数 359
参数匹配:细节 360
为什么要在意:关键字参数 361
本章小结 362
头脑风暴 363
本章习题 363
习题解答 364
第17章 函数的高级话题 365
匿名函数:lambda 365
lambda表达式 365
为什么使用lambda 367
如何(不要)让Python代码变得晦涩难懂 368
嵌套lambda和作用域 369
作为参数来应用函数 370
内置函数apply 370
为什么要在意:回调 371
传入关键字参数 372
和apply类似的调用语法 372
在序列中映射函数:map 373
函数式编程工具:filter和reduce 374
重访列表解析:映射 376
列表解析基础 376
增加测试和嵌套循环 377
列表解析和矩阵 380
理解列表解析 381
为什么要在意:列表解析和map 382
重访迭代器:生成器 383
生成器函数实例 383
扩展生成器函数协议:send和next 385
迭代器和内置类型 386
生成器表达式:迭代器遇到列表解析 387
对迭代的各种方法进行计时 388
函数设计概念 390
函数是对象:简洁调用 392
函数陷阱 393
本地变量是静态检测的 393
默认和可变对象 395
没有return语句的函数 396
嵌套作用域的循环变量 397
本章小结 397
头脑风暴 398
本章习题 398
习题解答 398
头脑风暴:第四部分练习题 400
第五部分 模块 405
第18章模块:宏伟蓝图 405
为什么使用模块 405
Python程序构架 406
如何组织一个程序 407
导入和属性 407
标准库模块 409
import如何工作 409
搜索 410
编译(可选) 414
运行 414
第三方工具:distutils 415
本章小结 415
头脑风暴 417
本章习题 417
习题解答 417
第19章模块代码编写基础 418
模块的创建 418
模块的使用 419
import语句 419
from语句 420
from语句 420
导入只发生一次 420
import和from是赋值语句 421
文件间变量名的改变 422
import和from的对等性 422
from语句潜在的陷阱 423
模块命名空间 425
文件生成命名空间 425
属性名的点号运算 427
导入和作用域 427
命名空间的嵌套 428
重载模块 429
reload基础 430
reload实例 431
为什么要在意:模块重载 432
本章小结 432
头脑风暴 434
本章习题 434
习题解答 434
第20章模块包 435
包导入基础 435
包和搜索路径设置 436
__init__py包文件 436
包导入实例 438
包对应的from和import 439
为什么要使用包导入 440
三个系统的传说 441
为什么要在意:模块包 443
本章小结 443
头脑风暴 445
本章习题 445
习题解答 445
第21章高级模块话题 446
在模块中隐藏数据 446
最小化from的破坏:_X和__a11__ 446
启用以后的语言特性 447
混合用法模式:__name__和__main__ 447
以__name__进行单元测试 448
修改模块搜索路径 450
import as扩展 451
相对导入语法 451
为什么使用相对导入 452
模块设计理念 454
模块是对象:元程序 455
模块陷阱 457
顶层代码的语句次序的重要性 457
通过变量名字符串导入模块 458
from复制变量名而不是连接 459
from会让变量语义模糊 460
reload不会影响from导入 460
reload from以及交互模式测试 461
reload的使用没有传递性 462
递归形式的from import无法工作 463
本章小结 464
头脑风暴 465
本章习题 465
习题解答 465
头脑风暴:第五部分练习题 466
第六部分类和OOP 471
第22章OOP:宏伟蓝图 471
为何使用类 472
概览OOP 473
属性继承搜索 473
类和实例 475
类方法调用 476
编写类树 476
OOP是为了代码重用 479
本章小结 481
头脑风暴 483
本章习题 483
习题解答 483
第23章类代码编写基础 485
类产生多个实例对象 485
类对象提供默认行为 486
实例对象是具体的元素 486
第一个例子 486
类通过继承进行定制 489
第二个例子 489
类是模块内的属性 491
类可以截获Python运算符 492
第三个例子 493
为什么要使用运算符重载 494
世界上最简单的Python类 495
本章小结 497
头脑风暴 499
本章习题 499
习题解答 499
第24章 类代码编写细节 501
class语句 501
一般形式 501
例子 502
方法 504
例子 505
调用超类的构造器 506
其他方法调用的可能性 506
继承 507
属性树的构造 507
继承方法的专有化 508
类接口技术 509
抽象超类 510
运算符重载 511
常见的运算符重载方法 512
__getitem__拦截索引运算 513
__getitem__和__iter__实现迭代 513
用户定义的迭代器 514
__getattr__和__setattr__捕捉属性的引用 518
模拟实例属性的私有性 520
__repr__和__str_会返回字符串表达形式 520
__ radd__处理右侧加法 522
__call__拦截调用 523
函数接口和回调代码 523
__ del__是析构器 525
命名空间完整的内容 526
简单变量名:如果赋值就不是全局变量 526
属性名称:对象命名空间 527
Python命名空间的“禅”:赋值将变量名分类 527
命名空间字典 529
命名空间链接 531
一个更实际的例子 533
本章小结 536
头脑风暴 537
本章习题 537
习题解答 537
第25章 类的设计 539
Python和OOP 539
通过调用标记进行重载(或不要) 540
类作为记录 540
类和继承:“是一个”关系 542
类和组合:“有一个”关系 544
重访流处理器 545
为什么要在意:类和持续性 548
OOP和委托 548
多重继承 549
类是对象:通用对象的工厂 552
为什么有工厂 554
方法是对象绑定或无绑定 554
重访文档字符串 556
为什么要在意:绑定方法和回调函数 557
类和模块 558
本章小结 558
头脑风暴 559
本章习题 559
习题解答 559
第26章 类的高级主题 560
扩展内置类型 560
通过嵌入扩展类型 560
通过子类扩展类型 561
类的伪私有属性 563
变量名压缩概览 564
为什么使用伪私有属性 564
新式类 566
钻石继承变动 567
其他新式类的扩展 570
静态和类方法 573
使用静态和类方法 575
函数装饰器 576
装饰器例子 578
类陷阱 579
修改类属性的副作用 579
多重继承:顺序很重要 580
类、方法以及嵌套作用域 581
“过度包装” 583
本章小结 584
头脑风暴 585
本章习题 585
习题解答 585
头脑风暴:第六部分练习题 586
第七部 异常和工具 595
第27章异常基础 595
为什么使用异常 596
异常的角色 596
异常处理:简明扼要 597
try/except/else语句 601
try语句分句 602
try/else分句 604
例子:默认行为 605
例子:捕捉内置异常 606
try/finally语句 607
例子:利用try/finally编写终止行为 608
统一try/except/finally 609
通过嵌套合并finally和except 610
合并try的例子 611
raise语句 612
例子:引发并捕捉用户定义的异常 613
例子利用raise传入额外的数据 613
例子:利用raise传递异常 614
assert语句 614
例子:收集约束条件(但不是错误) 615
with/as环境管理器 616
基本使用 616
环境管理协议 617
为什么要在意:错误检查 618
本章小结 620
头脑风暴 621
本章习题 621
习题解答 621
第28章异常对象 622
基于字符串的异常 623
字符串异常就要出局了 623
基于类的异常 624
类异常例子 624
为什么使用类异常 626
内置Exception类 629
定义异常文本 630
发送额外数据和实例行为 631
raise语句的一般形式 633
本章小结 634
头脑风暴 636
本章习题 636
习题解答 636
第29章异常的设计 637
嵌套异常处理器 637
例子:控制流程嵌套 638
例子语法嵌套化 639
异常的习惯用法 641
异常不总是错误 641
函数信号条件和raise 641
在try外进行调试 642
运行进程中的测试 643
关于sys.exc_info 644
与异常有关的技巧 644
应该包装什么 644
捕捉太多:避免空except语句 645
捕捉过少:使用基于类的分类 647
异常陷阱 647
字符串异常匹配是通过同一性而不是通过值 648
捕捉到错误的异常 649
核心语言总结 649
Python工具集 650
大型项目的开发工具 651
本章小结 653
头脑风暴 655
本章习题 655
习题解答 655
头脑风暴:第七部分练习题 656