第1篇Python编程基础 2
第1章 Python语言基础 2
1.1 Python语言介绍 2
1.2 Python版本介绍 3
1.2.1 Python语言的版本 3
1.2.2 Python的实现版本 4
1.3 集成开发环境 9
1.3.1 PyCham 9
1.3.2 Anaconda 10
1.4 代码的运行方式 17
1.5 网页运行方式 19
1.6 基本语法 23
1.7 Python之禅 26
第2章 基本数据类型 28
2.1 整数类型 28
2.1.1 整数的表示法 28
2.1.2 数值运算 29
2.1.3 位运算 31
2.1.4 移位运算 33
2.1.5 类型转换 34
2.1.6 其他进制表示法 35
2.1.7 小整数池 39
2.1.8 统计成绩的例子 40
2.1.9 韩信点兵的故事 41
2.2 布尔类型 42
2.2.1 布尔运算 42
2.2.2 类型转换 44
2.2.3 例子:谁在说谎 44
2.3 字节流 46
2.4 浮点数 50
2.4.1 基本运算 51
2.4.2 其他运算 52
2.4.3 类型转换 53
2.4.4 例子:求某个数的平方根 53
2.5 列表 54
2.5.1 列表特性 55
2.5.2 常见操作 56
2.5.3 找出丢失的数 60
2.5.4 背包问题 61
2.6 字符串 63
2.6.1 str类型的字符串 64
2.6.2 str类型的相关接口函数 64
2.6.3 bytes类型 68
2.6.4 str类型和bytes类型的转换 69
2.7 元组 70
2.7.1 元组的表示法 70
2.7.2 元组接口函数 71
2.8 集合 72
2.8.1 创建集合 72
2.8.2 基本操作 73
2.8.3 例子:删除重复元素 79
2.9 字典 80
2.9.1 创建字典 81
2.9.2 基本操作 81
2.9.3 例子:合并结果 86
2.9.4 例子:如何安全过河 87
2.10 NoneType类型 94
2.11 变量、对象和值的关系 94
第3章 函数 99
3.1 函数的定义和使用 99
3.2 函数的返回值 100
3.3 函数的参数 100
3.3.1 位置参数 101
3.3.2 将位置参数当作元组 101
3.3.3 调用时使用元组和列表 103
3.3.4 关键字参数 104
3.3.5 将实参当作字典 104
3.3.6 调用时使用字典 105
3.3.7 默认值 105
3.4 常见的系统自带函数 106
3.4.1 数据对象有关的函数 106
3.4.2 数学计算有关的函数 109
3.4.3 容器类型有关的函数 111
3.4.4 属性操作 116
3.5 lambda函数 117
3.6 递归调用 118
3.6.1 递归调用介绍 118
3.6.2 例子 119
第4章 模块和包 126
4.1 模块 126
4.2 包 128
4.3 软件包的安装 129
4.3.1 复制源代码到系统目录 129
4.3.2 使用PIP进行安装 130
4.3.3 使用easy_install和setup进行安装 134
第5章 文件操作 135
5.1 文件的基本操作 135
5.2 打开文件 136
5.3 文件对象的操作 137
5.4 关闭文件 142
5.5 特殊文件 143
5.6 文件对象的属性 145
第6章 基础库 146
6.1 正则表达式库 146
6.1.1 元字符和语法 147
6.1.2 C风格接口函数 154
6.1.3 面向风格接口函数 155
6.1.4 re.Match对象 155
6.2 数学库 157
6.3 时间库 159
6.3.1 时间表示法 159
6.3.2 接口函数 160
6.4 日期库 162
6.5 二叉树库 162
6.6 串行化库 164
6.6.1 基本流程 164
6.6.2 pickle用法 165
6.7 随机数库 166
6.7.1 生成随机整数和随机实数 167
6.7.2 其他形式的随机 169
6.7.3 伪随机问题 170
6.7.4 例子:计算面积 171
6.7.5 游戏:五对胡 172
第7章 异常处理 177
7.1 Python中的异常处理 177
7.1.1 捕捉异常 177
7.1.2 没有异常才执行的分支 180
7.1.3 无论有无异常都要执行的分支 181
7.2 抛出异常 182
7.3 常见的系统定义异常 183
第8章 类和对象 187
8.1 类的定义和实例创建 187
8.2 类的属性 189
8.3 初始化函数和销毁函数 190
8.4 实例对象的属性 192
8.4.1 类属性和实例对象属性的关系 192
8.4.2 self在类定义中表示当前对象 194
8.4.3 通过delattr()、setattr()等接口函数来操作属性 196
8.5 静态方法 198
8.6 类方法 199
8.7 访问控制 199
8.8 只读属性 200
8.8.1 使用@property修饰符 200
8.8.2 重新定义_setattr_()函数 201
8.9 类属性的安全检查 202
8.10 派生类 203
8.11 多重继承 204
第2篇Python编程高级主题 208
第9章 多线程 208
9.1 线程介绍 208
9.2 Python中的线程 209
9.2.1 主线程 209
9.2.2 线程状态 209
9.3 thread包 210
9.3.1 线程的启动 211
9.3.2 线程的退出 212
9.4 threading包 213
9.4.1 创建线程实例对象 213
9.4.2 派生自己的线程类 216
9.4.3 配置线程 217
9.4.4 启动线程 218
9.4.5 停止线程 219
9.4.6 等待线程结束 220
9.4.7 其他接口函数 221
9.5 线程同步 222
9.5.1 线程锁thread.Lock 223
9.5.2 线程锁threading.Lock 224
9.5.3 可重入锁threading.RLock 225
9.5.4 条件变量threading.Condition 227
9.5.5 信号量threading.Semaphore 228
9.5.6 事件threading.Event 231
9.6 线程安全 233
9.7 死锁 236
第10章 多进程 239
10.1 进程的概念 239
10.2 subprocess模块 240
10.2.1 面向过程的接口函数 241
10.2.2 Popen类 244
10.3 multiprocessing模块 247
10.3.1 创建进程 247
10.3.2 进程的属性 249
10.3.3 进程的接口函数 253
10.3.4 进程池 258
10.3.5 进程通信 260
10.4 os模块 265
10.4.1 启动进程——system() 265
10.4.2 启动进程并得到输出——popen() 265
10.4.3 得到当前进程ID——getpid() 266
10.4.4 得到父进程ID——getppid() 266
第11章 迭代器和生成器 268
11.1 迭代器 268
11.2 生成器 269
11.2.1 定义生成器 270
11.2.2 接口函数 270
第12章 装饰器 275
12.1 起源 275
12.2 被装饰函数带有参数 276
12.3 装饰函数带有参数 279
12.4 装饰函数带有返回值 280
12.5 使用多个装饰器 281
12.6 常用装饰器 282
12.6.1 类装饰器 282
12.6.2 退出时执行的函数 284
12.6.3 单例模式 284
12.6.4 执行时间限制 285
12.6.5 执行时间标定 286
12.6.6 自动重新运行 287
12.6.7 状态机 288
第13章 数据文件操作 293
13.1 csv文件的处理 293
13.2 yaml文件的处理 296
13.3 json文件的处理 298
第14章 软件测试 301
14.1 无框架的测试 301
14.2 PyUnit测试框架 305
14.2.1 运行方式 307
14.2.2 生成测试报告 309
14.2.3 测试步骤 312
14.2.4 断言 317
14.2.5 测试用例的接口函数 328
14.2.6 覆盖率 330
14.3 Pytest测试框架 333
14.3.1 测试用例 333
14.3.2 选择执行的测试用例 335
14.3.3 生成测试报告 339
14.3.4 测试步骤 341
14.3.5 断言 345
14.3.6 覆盖率 346
14.3.7 插件 349
第15章 网络编程 357
15.1 TCP/IP协议介绍 357
15.2 socket介绍 361
15.3 TCP echo服务器 363
15.4 简单的TCP客户端 364
15.5 UDP版的echo服务器 365
第16章 容器操作 367
16.1 Docker的安装 367
16.2 Docker的基本概念 369
16.3 docker-py库 370
16.3.1 建立连接 370
16.3.2 对Docker镜像的操作 371
16.3.3 运行Docker镜像 377
16.4 kubernetes库 379
第17章 Scrapy爬虫框架 388
17.1 Scrapy的安装 388
17.2 工作原理 390
17.3 一个简单的例子 391
17.4 Scrapy的架构图 393
17.5 爬虫 395
17.5.1 点赞统计例子 395
17.5.2 爬虫类 396
17.6 一个完整的项目 398
17.7 结果数据 400
17.8 选择器 402
17.8.1 介绍 403
17.8.2 text() 404
17.8.3 extract()extract_first() 405
17.8.4 @属性 406
17.8.5 元素[@属性] 406
17.9 设置 407
17.9.1 命令行方式 407
17.9.2 爬虫范围内的设置 408
17.9.3 项目范围内的设置 408
17.9.4 命令默认设定 409
17.9.5 全局默认设定 409
17.9.6 读取配置 411
17.9.7 常用配置 412
17.10 命令行工具 414
17.10.1 创建项目 414
17.10.2 创建爬虫 415
17.10.3 列出爬虫模板 416
17.10.4 查看某个爬虫模板 417
17.10.5 基于模板创建爬虫 418
17.10.6 启动爬虫 418
17.10.7 爬虫列表 419
17.10.8 爬取指定页面 420
17.10.9 在浏览器中显示页面 421
17.10.10 启动交互式shell 422
17.10.11 runspider 423
17.10.12 标定Scrapy的性能 424
17.10.13 其他命令 425
17.11 爬取北京公交线路数据 426
第18章 Flask Web开发框架 429
18.1 Flask的安装 429
18.2 最简单的Flask应用 430
18.3 路由 430
18.3.1 动态路由 431
18.3.2 限定类型 432
18.3.3 地址尾部的“/” 433
18.4 运行应用的参数 435
18.5 命令行方式运行 436
18.6 HTTP的方法 437
18.7 静态文件 437
18.8 模板 438
18.8.1 变量 439
18.8.2 表达式 440
18.8.3 子模板 442
第19章 键值数据库Redis 444
19.1 介绍 444
19.2 服务器的安装 445
19.2.1 服务器容器下载 446
19.2.2 启动Redis容器 446
19.3 Python客户端的安装 448
19.4 元操作 448
19.5 字符串数据的操作 449
19.6 哈希数据的操作 456
19.7 列表数据的操作 458
19.8 集合数据的操作 460
19.9 订阅发布 462
19.9.1 基本用法 462
19.9.2 订阅多个频道 465
19.9.3 频道使用通配符 466
19.10 设置时效 467
19.11 管道模式 467
第20章 图形界面应用 469
20.1 Tk和Tkinter 469
20.1.1 基本程序结构 470
20.1.2 常用组件 471
20.1.3 布局 487
20.1.4 游戏2048 489
20.2 wxPython 494
20.2.1 程序基本结构 494
20.2.2 基本用户界面元素 495
20.3 PyQt 508
20.3.1 基本程序结构 508
20.3.2 常用组件 509
20.4 小结 517
第21章 数据处理 518
21.1 matplotlib 518
21.2 NumPy 526
21.2.1 ndarray的构造 526
21.2.2 ndarray的一些属性 531
21.2.3 ndarray的一些操作 532
21.2.4 NumPy在金融领域的应用 534
21.2.5 NumPy中的傅里叶变换 537
21.2.6 神经网络应用 541