前言 1
第一部分 使用入门 21
第1章 问答环节 21
人们为何使用Python 21
软件质量 22
开发者效率 23
Python是一门“脚本语言”吗 23
好吧,Python的缺点是什么 25
如今谁在使用Python 25
其他的Python设计权衡:一些难以把握的方面 26
使用Python可以做些什么 28
系统编程 28
图形用户界面(GUI) 29
Internet脚本 29
组件集成 30
数据库编程 30
快速原型 31
数值计算和科学计算编程 31
更多内容:游戏、图像、数据挖掘、机器人、Excel等 31
Python如何开发并获得支持 32
开源的权衡 33
Python有哪些技术上的优点 33
面向对象和函数式 33
免费 34
可移植 34
功能强大 35
可混合 36
相对简单易用 36
相对简单易学 37
以Monty Python命名 37
Python和其他语言比较起来怎么样 38
本章小结 39
本章习题 39
习题解答 40
Python是工程,不是艺术 41
第2章 Python如何运行程序 43
Python解释器简介 43
程序执行 45
程序员的视角 45
Python的视角 46
执行模型的变体 48
Python的各种实现 49
执行优化工具 52
冻结二进制文件 53
未来的可能性 54
本章小结 55
本章习题 55
习题解答 56
第3章 你应如何运行程序 57
交互式命令行模式 57
开始一个交互式会话 57
Windows平台上的交互式命令行在哪里 59
系统路径 59
Python 3.3中的新Windows选项:PATH和启动器 60
运行的位置:代码目录 61
不需要输入的内容:提示符和注释 62
交互式地运行代码 63
为什么要使用交互式命令行模式 64
使用注意:交互命令行模式 65
系统命令行和文件 67
第一段脚本 68
使用命令行运行文件 69
不同的命令行使用方式 70
使用注意:命令行和文件 71
UNIX风格可执行脚本:#! 72
UNIX脚本基础 72
UNIX env查找技巧 73
Python 3.3 Windows启动器:Windows也有#!了 73
点击文件图标 75
图标点击基础知识 75
在Windows上点击图标 76
Windows上输入的技巧 77
其他图标点击的限制 79
模块导入和重载 79
导入和重载基础知识 80
模块的宏观视角:属性 82
使用注意:import和reload 85
使用exec运行模块文件 85
IDLE用户界面 86
IDLE启动细节 87
IDLE基础用法 88
IDLE功能特性 89
高级IDLE工具 90
使用注意:IDLE 90
其他IDE 92
其他启动选项 93
嵌入式调用 93
冻结二进制可执行文件 94
文本编辑器启动方式 94
其他的启动方式 95
未来的可能 95
应该选用哪种方式 95
调试Python代码 96
本章小结 97
本章习题 97
习题解答 98
第一部分练习题 99
第二部分 类型和运算 105
第4章 介绍Python对象类型 105
Python知识结构 105
为什么要使用内置类型 106
Python核心数据类型 107
数字 108
字符串 110
序列操作 110
不可变性 112
特定类型的方法 113
寻求帮助 115
字符串编程的其他方式 116
Unicode字符串 117
模式匹配 119
列表 120
序列操作 120
特定的操作 121
边界检查 121
嵌套 122
推导 122
字典 125
映射操作 125
重访嵌套 126
不存在的键:if测试 128
键的排序:for循环 129
迭代和优化 131
元组 132
为什么要使用元组 133
文件 133
二进制字节文件 134
Unicode文本文件 135
其他类文件工具 137
其他核心类型 137
如何破坏代码的灵活性 139
用户定义的类 140
剩余的内容 141
本章小结 141
本章习题 141
习题解答 142
第5章 数值类型 143
数值类型基础知识 143
数值字面量 144
内置数值工具 146
Python表达式运算符 146
数字的实际应用 151
变量与基础表达式 151
数值的显示格式 153
str和repr显示格式 154
普通比较与链式比较 154
除法:经典除法、向下取整除法和真除法 156
整数精度 160
复数 160
十六进制、八进制和二进制:字面量与转换 161
按位操作 163
其他内置数值工具 164
其他数值类型 167
小数类型 167
分数类型 169
集合 173
布尔型 180
数值扩展 181
本章小结 182
本章习题 182
习题解答 182
第6章 动态类型 184
缺少声明语句的情况 184
变量、对象和引用 184
类型属于对象,而不是变量 186
对象的垃圾收集 187
关于Python垃圾回收的更多讨论 188
共享引用 189
共享引用和在原位置修改 190
共享引用和相等 192
动态类型随处可见 193
“弱”引用 194
本章小结 194
本章习题 194
习题解答 195
第7章 字符串基础 196
本章范围 196
Unicode简介 197
字符串基础 197
字符串字面量 199
单引号和双引号字符串是一样的 200
转义序列代表特殊字符 200
原始字符串阻止转义 203
三引号编写多行块字符串 205
实际应用中的字符串 206
基本操作 206
索引和分片 207
请留意:分片 211
字符串转换工具 212
修改字符串I 214
字符串方法 216
方法调用语法 216
字符串的方法 217
字符串方法示例:修改字符串Ⅱ 218
字符串方法示例:解析文本 220
实际应用中的其他常见字符串方法 220
原始string模块的函数(在Python 3.X中删除) 221
字符串格式化表达式 223
格式化表达式基础 224
高级格式化表达式语法 225
高级格式化表达式举例 226
基于字典的格式化表达式 227
字符串格式化方法调用 228
字符串格式化方法基础 228
添加键、属性和偏移量 229
高级格式化方法语法 230
高级格式化方法举例 231
与%格式化表达式比较 233
为什么使用格式化方法 236
通用类型分类 241
同一分类中的类型共享同一个操作集 241
可变类型能够在原位置修改 242
本章小结 242
本章习题 243
习题解答 243
第8章 列表与字典 245
列表 245
列表的实际应用 248
基本列表操作 248
列表迭代和推导 248
索引、分片和矩阵 249
原位置修改列表 250
字典 256
字典的实际应用 258
字典的基本操作 258
原位置修改字典 259
其他字典方法 260
示例:电影数据库 262
字典用法注意事项 263
创建字典的其他方式 267
请留意:字典vs列表 268
Python 3.X和2.7中的字典变化 269
请留意:字典接口 276
本章小结 277
本章习题 277
习题解答 277
第9章 元组、文件与其他核心类型 279
元组 280
元组的实际应用 281
为什么有了列表还要元组 283
重访记录:有名元组 284
文件 286
打开文件 287
使用文件 288
文件的实际应用 289
文本和二进制文件:一个简要的故事 290
在文件中存储Python对象:转换 291
存储Python原生对象:pickle 293
用JSON格式存储Python对象 294
存储打包二进制数据:struct 296
文件上下文管理器 297
其他文件工具 297
核心类型复习与总结 299
请留意:运算符重载 300
对象灵活性 300
引用vs复制 301
比较、等价性和真值 303
Python中True和False的含义 307
Python的类型层次 309
类型的对象 309
Python中的其他类型 311
内置类型陷阱 311
赋值创建引用,而不是复制 311
重复会增加层次深度 312
注意循环数据结构 313
不可变类型不可以在原位置改变 313
本章小结 314
本章习题 314
习题解答 315
第二部分练习题 315
第三部分 语句和语法 321
第10章 Python语句简介 321
重温Python的知识结构 321
Python的语句 322
两种不同的if 324
Python增加的元素 325
Python删除的元素 325
为什么采用缩进语法 327
几种特殊情况 329
简短示例:交互式循环 331
一个简单的交互式循环 331
对用户输入做数学运算 333
通过测试输入数据来处理错误 334
用try语句处理错误 335
嵌套三层深的代码 337
本章小结 338
本章习题 338
习题解答 338
第11章 赋值、表达式和打印 340
赋值语句 340
赋值语句形式 341
序列赋值 342
Python 3.X中的扩展序列解包 345
多目标赋值 349
增量赋值 350
变量命名规则 353
Python中的废弃协议 355
表达式语句 356
表达式语句和原位置修改 358
打印操作 358
Python 3.X的print函数 359
Python 2.X的print语句 362
打印流重定向 363
版本中立的打印 367
为什么你要注意:print和stdout 369
本章小结 370
本章习题 370
习题解答 370
第12章 if测试和语法规则 372
if语句 372
一般形式 372
基础示例 373
多路分支 373
复习Python语法规则 375
代码块分隔符:缩进规则 377
语句分隔符:行与行间连接符 378
一些特殊情况 379
真值和布尔测试 381
if/else三元表达式 383
请留意:布尔值 384
本章小结 386
本章习题 386
习题解答 386
第13章 while循环和for循环 387
while循环 387
一般形式 387
示例 388
break、continue、pass和循环的else 389
一般循环形式 389
pass 389
continue 391
break 391
循环的else 392
请留意:仿真C语言的while循环 393
for循环 394
一般形式 394
示例 395
请留意:文件扫描器 400
编写循环的技巧 402
计数器循环:range 402
序列扫描:while和range vs for 403
序列乱序器:range和len 404
非穷尽遍历:range vs分片 405
修改列表:range vs推导 406
并行遍历:zip和map 407
同时给出偏移量和元素:enumerate 410
请留意:shell命令及其他 411
本章小结 414
本章习题 414
习题解答 414
第14章 迭代和推导 416
迭代器:初次探索 417
迭代协议:文件迭代器 417
手动迭代:iter和next 420
其他内置类型可迭代对象 423
列表推导:初次深入探索 425
列表推导基础 426
在文件上使用列表推导 427
扩展的列表推导语法 428
其他迭代上下文 430
Python 3.X新增的可迭代对象 435
对Python 2.X版本代码的影响:利与弊 435
range可迭代对象 436
map、zip和filter可迭代对象 437
多遍迭代器vs单遍迭代器 439
字典视图可迭代对象 440
其他迭代话题 441
本章小结 442
本章习题 442
习题解答 442
第15章 文档 444
Python文档资源 444
#注释 445
dir函数 445
文档字符串:_doc_ 447
PyDoc:help函数 450
PyDoc:HTML报告 453
改变PyDoc的颜色 456
超越文档字符串:Sphinx 461
标准手册集 462
网络资源 463
已出版的书籍 463
常见代码编写陷阱 463
本章小结 465
本章习题 466
习题解答 466
第三部分练习题 467
第四部分 函数和生成器 473
第16章 函数基础 473
为何使用函数 474
编写函数 475
def语句 476
def语句执行于运行时 477
第一个示例:定义和调用 478
定义 478
调用 478
Python中的多态 479
第二个示例:寻找序列的交集 480
定义 480
调用 481
重访多态 482
局部变量 482
本章小结 483
本章习题 483
习题解答 483
第17章 作用域 485
Python作用域基础 485
作用域细节 486
变量名解析:LEGB规则 488
作用域实例 490
内置作用域 491
打破Python 2.X的小宇宙 494
global语句 494
程序设计:最少化全局变量 495
程序设计:最小化跨文件的修改 497
其他访问全局变量的方式 498
作用域和嵌套函数 499
嵌套作用域的细节 500
嵌套作用域举例 500
工厂函数:闭包 501
使用默认值参数来保存外层作用域的状态 503
Python 3.X中的nonlocal语句 507
nonlocal基础 508
nonlocal应用 509
为什么选nonlocal?状态保持备选项 511
nonlocal变量的状态:仅适用于Python 3.X 511
全局变量的状态:只有一份副本 512
类的状态:显式属性(预习) 513
函数属性的状态:Python 3.X和Python 2.X的异同 514
请留意:定制open 516
本章小结 518
本章习题 518
习题解答 520
第18章 参数 521
参数传递基础 521
参数和共享引用 522
避免修改可变参数 524
模拟输出参数和多重结果 525
特殊的参数匹配模式 526
参数匹配基础 526
参数匹配语法 527
更深入的细节 528
关键字参数和默认值参数的示例 529
可变长参数的实例 532
Python 3.X的keyword-only参数 536
min提神小例 539
满分 540
附加分 541
结论 542
通用set函数 542
模拟Python 3.X print函数 544
使用keyword-only参数 546
请留意:关键字参数 547
本章小结 548
本章习题 548
习题解答 549
第19章 函数的高级话题 550
函数设计概念 550
递归函数 552
用递归求和 552
编码替代方案 553
循环语句vs递归 554
处理任意结构 555
函数对象:属性和注解 558
间接函数调用:“一等”对象 559
函数自省 560
函数属性 561
Python 3.X中的函数注解 562
匿名函数:lambda 564
lambda表达式基础 564
为什么使用lambda 566
如何(不)让Python代码变得晦涩难懂 568
作用域:lambda也能嵌套 569
请留意:lambda回调 570
函数式编程工具 570
在可迭代对象上映射函数:map 571
选择可迭代对象中的元素:filter 573
合并可迭代对象中的元素:reduce 573
本章小结 575
本章习题 575
习题解答 575
第20章 推导和生成 577
列表推导与函数式编程工具 577
列表推导与map 578
使用filter增加测试和循环嵌套 579
示例:列表推导与矩阵 582
不要滥用列表推导:简单胜于复杂(KISS) 584
请留意:列表推导和map 585
生成器函数与表达式 587
生成器函数:yield vs return 587
生成器表达式:当可迭代对象遇见推导语法 592
生成器函数vs生成器表达式 597
生成器是单遍迭代对象 599
Python 3.3的yield from扩展 600
内置类型、工具和类中的值生成 601
实例:生成乱序序列 604
不要过度使用生成器:明确胜于隐晦(EIBTI) 609
示例:用迭代工具模拟zip和map 611
为什么你要注意:单遍迭代 616
推导语法总结 617
作用域及推导变量 617
理解集合推导和字典推导 619
集合与字典的扩展推导语法 620
本章小结 621
本章习题 621
习题解答 621
第21章 基准测试 623
计时迭代可选方案 623
自己编写的计时模块 624
3.3版本中新的计时器调用 627
计时脚本 628
计时结果 630
计时模块可选方案 633
其他建议 636
用timeit为迭代和各种Python计时 637
timeit基础用法 637
基准测试模块和脚本:timeit 641
基准测试脚本结果 643
基准测试的更多乐趣 646
其他基准测试主题:pystones 650
函数陷阱 651
局部变量是被静态检测的 651
默认值参数和可变对象 653
没有return语句的函数 655
其他函数陷阱 655
本章小结 656
本章习题 656
习题解答 656
第四部分练习题 657
第五部分 模块和包 663
第22章 模块:宏伟蓝图 663
为什么使用模块 664
Python程序架构 664
如何组织一个程序 665
导入和属性 665
标准库模块 667
import如何工作 667
1.搜索 668
2.编译(可选) 668
3.运行 669
字节码文件:Python 3.2及以上版本的_pycache_ 670
实际应用中的字节码文件模型 671
模块搜索路径 672
配置搜索路径 674
搜索路径的变化 674
sys.path列表 675
模块文件选择 676
第三方工具:distutils 678
本章小结 678
本章习题 679
习题解答 679
第23章 模块代码编写基础 680
模块的创建 680
模块文件名 680
其他种类的模块 681
模块的使用 681
import语句 681
from语句 682
from*语句 682
导入只发生一次 683
import和from是赋值语句 684
import和from的等价性 685
from语句潜在的陷阱 686
模块命名空间 687
文件产生命名空间 687
命名空间字典:_dict_ 689
属性名称的点号运算 689
导入与作用域 690
命名空间的嵌套 691
重新加载模块 692
reload基础 693
reload示例 694
请留意:模块重新加载 695
本章小结 696
本章习题 696
习题解答 696
第24章 模块包 698
包导入基础 698
包和搜索路径设置 699
_init_.py包文件 700
包导入示例 702
包的from语句与包的import语句 703
为什么要使用包导入 704
三个系统的故事 705
请留意:模块包 707
包相对导入 708
Python 3.X中的变化 708
相对导入基础知识 709
为什么使用相对导入 710
相对导入的适用情况 713
模块查找规则总结 713
相对导入的实际应用 714
包相对导入的陷阱:混合使用 719
Python 3.3中的命名空间包 724
命名空间包的语义 725
对常规包的影响:可选的_init_.py 726
命名空间包的实际应用 727
命名空间包嵌套 729
文件仍然优先于路径 730
本章小结 732
本章习题 732
习题解答 733
第25章 高级模块话题 734
模块设计概念 734
模块中的数据隐藏 736
使*的破坏最小化:_X和_all_ 736
启用未来语言特性:_future_ 737
混合使用模式:_name_和_main_ 738
以_name_进行单元测试 739
示例:双模式代码 740
货币符号:Unicode的应用 743
文档字符串:模块文档的应用 745
修改模块搜索路径 746
import语句和from语句的as扩展 747
示例:模块即是对象 748
用名称字符串导入模块 750
运行代码字符串 751
直接调用:两种方式 751
示例:传递性模块重载译注1 752
递归重载器 752
另外的代码 756
模块陷阱 759
模块名称冲突:包和包相对导入 760
顶层代码中语句次序很重要 760
from复制名称,而不是链接 761
from*会让变量含义模糊化 762
reload不能作用于from导入 762
reload、from以及交互式测试 763
递归形式的from导入可能无法工作 764
本章小结 765
本章习题 766
习题解答 766
第五部分练习题 766