Python语言具有免费开源、简单易学、可移植性和解释性强、可扩展可嵌入等优点,在国内外都得到了广泛的应用。
本书基于Python 3的版本进行讲解。本书共有11章,由浅入深地讲解了Python的相关知识。本书从Python的安装开始讲起,对数据类型、函数、内置类型、集合类型、异常、生成器、文件和资源管理、单元测试等重要知识进行了系统化的讲解。
1.Python是一种优秀的动态语言,其应用领域非常广泛。Python语言具有免费开源、简单易学、可移植性和解释性强、可扩展\可嵌入等优点。
2.本书深入地介绍了Python语言,通过阅读本书,你可以了解Python高手常用的工具和技巧。
3.本书并不会讲解所有的Python知识,只是教你快速掌握作为一名Python开发人员应该掌握的基本工具、基本术语和函数、标准库以及其他模块。
本书包含如下内容:
Python语法的核心元素
PDB调试器
字符串与集合类型
unittest软件包
函数和模块
面向对象编程
异常
文件和资源管理
生成器函数
Robert Smallshire是Sixty North的创始人之一。Sixty North是挪威的一家软件咨询和培训公司,该公司服务于整个欧洲,并且该公司主要使用Python工作。Robert从事高级架构和技术管理方面的工作,曾为多家软件公司提供能源领域的工具。他对尖端科学和企业级软件有着深刻的理解,并且在这些领域设计、倡导并实现了高效的软件架构,他主要使用Python、C++、C#、F#以及JavaScript。Robert经常在技术大会、聚会和企业软件活动中发表演讲,而且主题多种多样,主要有软件开发中的行为微观经济学和在8位微控制器上实现Web服务等。他是奥斯陆Python小组的组织者,并且拥有自然科学的博士学位。
Austin Bingham也是Sixty North的创始人之一。Austin出生于得克萨斯州,2008年移居挪威斯塔万格,在那里他使用C++和Python开发了业界领先的原油储藏建模软件。在此之前,他曾在美国国家仪器公司开发LabVIEW,在得克萨斯大学奥斯汀分校的应用研究实验室(Applied Research Labs)为美国海军和一些电信公司开发声纳系统。他是一位经验丰富的主持人和教师,曾在众多会议、软件组织和企业内部场所发表过演讲。Austin还是开源社区的活跃成员,定期为各种Python和Emacs项目做出贡献。他还是斯塔万格软件开发联盟(Stavanger Software Developers)的创始人。斯塔万格软件开发联盟是斯塔万格最大、最活跃的社交软件开发组织之一。Austin拥有得克萨斯大学奥斯汀分校计算机工程硕士学位。
第 1章 入门 1
1.1 获取并安装Python 3 1
1.1.1 Windows 2
1.1.2 macOS 3
1.1.3 Linux 4
1.2 启动Python命令行REPL 5
1.3 退出REPL 6
1.3.1 Windows 7
1.3.2 UNIX 7
1.4 代码结构和缩进语法 7
1.5 Python文化 10
1.6 导入标准库模块 12
1.7 获取帮助 12
1.7.1 使用math. facto- rial()进行水果计数 14
1.7.2 不同的数字类型 15
1.8 标量数据类型:整数、浮点数、None以及bool 16
1.8.1 int 16
1.8.2 float 18
1.8.3 None 19
1.8.4 bool 19
1.9 关系运算符 21
1.10 控制流:if语句和while循环 22
1.10.1 条件控制流:if语句 22
1.10.2 if…else语句 23
1.10.3 if…elif…else语句 23
1.10.4 有条件的重复:while语句 24
1.11 小结 27
第 2章 字符串与集合类型 29
2.1 str——不可变的Unicode码位序列 29
2.2 禅之刻 31
2.2.1 相邻字符串的拼接 31
2.2.2 多行字符串与换行 32
2.2.3 原始字符串 33
2.2.4 字符串也是序列 34
2.2.5 字符串方法 35
2.3 使用Unicode的字符串 37
2.4 bytes ——不可变的字节序列 37
2.4.1 字节字面量 38
2.4.2 bytes与str的相互转换 38
2.5 list ——对象序列 41
2.6 dict类型——键关联值 42
2.7 for循环——迭代 43
2.8 融会贯通 44
2.9 小结 47
第3章 模块化 50
3.1 在一个.py文件中组织代码 50
3.1.1 从操作系统shell运行Python程序 51
3.1.2 将模块导入到REPL中 52
3.2 定义函数 53
3.3 将模块组织成函数 54
3.4 Python执行模型 57
3.5 创建带有命令行参数的主函数 58
3.6 禅之刻 63
3.7 docstrings 64
3.8 注释 67
3.9 Shebang 67
3.9.1 Linux和Mac上可执行的Python程序 68
3.9.2 Windows上可执行的Python程序 68
3.10 小结 69
第4章 内置类型和对象模型 71
4.1 Python对象引用的本质 71
4.1.1 引用重赋值 72
4.1.2 将一个引用赋值给另一个引用 72
4.1.3 探索值并使用id()获取标识 73
4.1.4 使用is测试标识的相等性 74
4.1.5 无改变的变动 74
4.1.6 引用可变对象 75
4.1.7 值相等(等值)与标识相等 76
4.2 参数传递语义——通过对象引用 77
4.2.1 在函数中修改外部对象 77
4.2.2 在函数中绑定新对象 78
4.2.3 参数传递是引用绑定 79
4.3 Python的return语义 80
4.4 函数参数详解 81
4.4.1 默认参数值 81
4.4.2 关键字参数 82
4.4.3 何时对默认参数进行求值 82
4.5 Python的类型系统 85
4.5.1 Python中的动态类型 85
4.5.2 Python中的强类型 86
4.6 变量声明和作用域 86
4.7 作用域实战 87
4.7.1 全局作用域和局部作用域中的标识名称 88
4.7.2 global关键词 89
4.8 禅之刻 90
4.9 一切皆对象 90
4.10 小结 92
第5章 探究内置集合类型 95
5.1 tuple——不可变的对象序列 96
5.1.1 元组字面量 96
5.1.2 访问元组中的元素 96
5.1.3 元组的长度 96
5.1.4 迭代元组 96
5.1.5 连接与重复元组 97
5.1.6 单个元素的元组 97
5.1.7 空元组 98
5.1.8 可选的括号 98
5.1.9 返回与拆包元组 98
5.1.10 通过元组拆包交换变量 99
5.2 元组构造函数 99
5.3 字符串实战 100
5.3.1 字符串的长度 100
5.3.2 连接字符串 101
5.3.3 拼接字符串 101
5.3.4 拆分字符串 102
5.4 禅之刻 102
5.4.1 分割字符串 103
5.4.2 字符串格式化 103
5.4.3 其他字符串方法 104
5.5 range——等间隔的整数集合 105
5.5.1 起始值 105
5.5.2 步长参数 106
5.5.3 不使用区间:enumerate() 107
5.6 列表实战 108
5.6.1 列表的负数索引(其他序列同理) 108
5.6.2 列表切片 109
5.6.3 复制列表 112
5.6.4 浅复制 113
5.6.5 重复列表 117
5.6.6 使用index()查找列表元素 118
5.6.7 使用count()和in进行成员资格测试 119
5.6.8 使用del按照索引删除列表元素 119
5.6.9 使用remove()按照值删除列表元素 120
5.6.10 向列表中插入元素 120
5.6.11 连接列表 120
5.6.12 重排列表元素 121
5.6.13 异地重排 122
5.7 字典 123
5.7.1 复制字典 124
5.7.2 更新字典 125
5.7.3 迭代字典的键 125
5.7.4 迭代字典的值 126
5.7.5 迭代键值对 127
5.7.6 字典键的成员资格测试 127
5.7.7 删除字典的项目 128
5.7.8 字典的可变性 128
5.7.9 美化输出 129
5.8 集——包含唯一元素的无序集合 129
5.8.1 set构造函数 130
5.8.2 迭代集 131
5.8.3 集的成员资格测试 131
5.8.4 向集中添加元素 131
5.8.5 从集中删除元素 132
5.8.6 复制集 133
5.8.7 集的代数运算 133
5.8.8 并集 134
5.8.9 补集 134
5.9 集合协议 136
5.9.1 容器协议 137
5.9.2 大小协议 137
5.9.3 可迭代协议 137
5.9.4 序列协议 137
5.9.5 其他协议 138
5.10 小结 138
第6章 异常 140
6.1 异常与控制流程 140
6.2 处理多异常 143
6.3 程序员的错误 145
6.4 空代码块——pass语句 146
6.5 异常对象 146
6.6 不明智的返回码 147
6.7 重抛异常 148
6.8 异常是函数API的一部分 149
6.8.1 Python抛出的异常 150
6.8.2 捕获异常 151
6.8.3 明确地抛出异常 152
6.9 守卫子句 153
6.10 异常、API以及协议 155
6.10.1 IndexError 155
6.10.2 ValueError 156
6.10.3 KeyError 156
6.11 不使用守卫子句处理TpyeError 156
6.12 Pythonic风格——EAFP与LBYL 157
6.13 清理操作 159
6.14 禅之刻 160
6.15 平台特定的代码 161
6.16 小结 162
第7章 推导、可迭代与生成器 164
7.1 推导 164
7.1.1 列表推导 165
7.1.2 集推导 166
7.1.3 字典推导 166
7.1.4 过滤推导 168
7.2 禅之刻 169
7.3 迭代协议 170
7.3.1 迭代协议实例 170
7.3.2 更好的迭代实例 171
7.4 生成器函数 172
7.4.1 yield关键字 172
7.4.2 生成器是迭代器 173
7.4.3 生成器代码何时执行 174
7.4.4 管理生成器的显式状态 176
7.4.5 惰性与无限 178
7.5 生成器表达式 180
7.5.1 生成器对象只运行一次 180
7.5.2 低内存消耗的迭代器 181
7.5.3 可选的括号 181
7.5.4 在生成器表达式中使用if子句 181
7.6 内置的迭代工具 181
7.6.1 itertools简介 182
7.6.2 布尔序列 183
7.6.3 使用zip合并序列 183
7.6.4 使用chain()进行序列惰性连接 185
7.7 融会贯通 185
7.8 小结 186
7.8.1 生成器 187
7.8.2 迭代工具 187
第8章 使用类定义新类型 188
8.1 定义类 189
8.2 实例方法 190
8.3 实例初始化方法 191
8.4 校验与不变式 192
8.5 增加第二个类 194
8.6 协同类 196
8.7 禅之刻 197
8.8 定座位 197
8.9 以实现细节命名方法 204
8.9.1 实现relocate_ passenger() 206
8.9.2 计数可用座位 208
8.10 有时你可能只需要函数对象 208
8.11 多态与鸭子类型 211
8.12 继承与实现共享 215
8.12.1 一个飞机基类 215
8.12.2 继承Aircraft 216
8.12.3 将公共功能提升到基类中 217
8.13 小结 218
第9章 文件和资源管理 221
9.1 文件 221
9.1.1 二进制和文件模式 222
9.1.2 编码的重要性 222
9.1.3 以写入模式打开文件 223
9.1.4 写入文件 224
9.1.5 关闭文件 225
9.1.6 Python之外的文件知识 225
9.1.7 读取文件 226
9.1.8 向文件追加内容 228
9.1.9 文件对象作为迭代器 228
9.2 上下文管理器 230
9.2.1 使用finally管理资源 232
9.2.2 with代码块 233
9.3 禅之刻 234
9.4 二进制文件 235
9.4.1 BMP文件格式 235
9.4.2 位操作符 240
9.4.3 写BMP文件 240
9.5 类文件对象 244
9.5.1 你已经见过类文件对象 244
9.5.2 使用类文件对象 244
9.6 其他资源 245
9.7 小结 248
第 10章 使用Python库进行单元测试 250
10.1 测试用例 250
10.2 固件 251
10.3 断言 251
10.4 单元测试示例:文本分析 251
10.4.1 运行初始化测试 253
10.4.2 让测试通过 253
10.5 用固件创建临时文件 254
10.6 使用新固件 255
10.7 使用断言测试行为 256
10.7.1 计数行数 257
10.7.2 计数字符数 258
10.8 测试异常 260
10.9 测试文件存在性 261
10.10 禅之刻 262
10.11 小结 262
第 11章 使用PDB进行调试 264
11.1 调试命令 265
11.2 调试回文程序 266
11.2.1 使用PDB找Bug 268
11.2.2 使用抽样找到无限循环 269
11.2.3 设置显式的断点 270
11.2.4 跳过执行 272
11.2.5 修复BUG 274
11.3 小结 275
附录A 虚拟环境 277
附录B 打包与分发 280
附录C 安装第三方包 288
后记——刚刚开始 292