第1章 进入Python 3.7的精彩世界 1
1.1 Python的起源 1
1.2 Python的应用场合 2
1.3 从2.7到3.7, Python的新特性 4
1.4 如何学习Python 6
1.5 Python环境构建 7
1.5.1 在Windows系统中安装Python 7
1.5.2 在Linux、 UNIX系统和Mac中安装Python 14
1.5.3 其他版本 14
1.6 从Hello World开始 14
1.7 调试 15
1.8 问题解答 16
1.9 温故知新,学以致用 17
第2章 开启Python之旅 18
2.1 认识程序 18
2.1.1 程序 18
2.1.2 调试 19
2.1.3 语法错误 19
2.1.4 运行错误 20
2.1.5 语义错误 20
2.2 数据类型 20
2.2.1 整型 21
2.2.2 浮点型 22
2.2.3 复数 23
2.2.4 数据类型转换 23
2.2.5 常量 24
2.3 变量和关键字 24
2.3.1 变量 24
2.3.2 变量名称 28
2.4 语句 29
2.5 表达式 30
2.6 运算符和操作对象 31
2.6.1 什么是运算符和操作对象 31
2.6.2 算术运算符 31
2.6.3 比较运算符 32
2.6.4 赋值运算符 34
2.6.5 位运算符 35
2.6.6 逻辑运算符 36
2.6.7 成员运算符 36
2.6.8 身份运算符 37
2.6.9 运算符优先级 37
2.7 字符串操作 39
2.8 注释 42
2.9 牛刀小试——九九乘法表实现 43
2.10 调试 44
2.11 问题解答 44
2.12 温故知新,学以致用 45
第3章 列表和元组 47
3.1 通用序列操作 47
3.1.1 索引 47
3.1.2 分片 49
3.1.3 序列相加 51
3.1.4 乘法 52
3.1.5 成员资格 53
3.1.6 长度、最小值和最大值 54
3.2 列表 54
3.2.1 更新列表 54
3.2.2 嵌套列表 58
3.2.3 列表方法 59
3.3 元组 66
3.3.1 tuple函数 67
3.3.2 元组的基本操作 67
3.3.3 元组内置函数 68
3.4 列表与元组的区别 69
3.5 牛刀小试——列表与元组相互转化 70
3.6 调试 70
3.7 问题解答 71
3.8 温故知新,学以致用 72
第4章 字符串 74
4.1 字符串的基本操作 74
4.2 字符串格式化 75
4.2.1 字符串格式化符号 75
4.2.2 字符串格式化元组 77
4.3 字符串方法 80
4.3.1 find()方法 80
4.3.2 join()方法 81
4.3.3 lower()方法 81
4.3.4 upper()方法 82
4.3.5 swapcase()方法 83
4.3.6 replace()方法 83
4.3.7 split()方法 84
4.3.8 strip()方法 84
4.3.9 translate()方法 85
4.4 牛刀小试——变形金刚 86
4.5 调试 86
4.6 问题解答 87
4.7 温故知新,学以致用 87
第5章 字典 89
5.1 字典的使用 89
5.2 创建和使用字典 90
5.2.1 dict函数 90
5.2.2 字典的基本操作 91
5.2.3 字典的格式化字符串 92
5.2.4 字典和列表的区别 93
5.3 字典方法 93
5.3.1 clear()方法 94
5.3.2 copy()方法 95
5.3.3 fromkeys()方法 95
5.3.4 get()方法 96
5.3.5 key in dict方法 96
5.3.6 items()方法 97
5.3.7 keys()方法 97
5.3.8 setdefault()方法 98
5.3.9 update()方法 98
5.3.10 values()方法 99
5.4 牛刀小试——字典合并与排序 99
5.5 调试 100
5.6 问题解答 101
5.7 温故知新,学以致用 101
第6章 条件、循环和其他语句 103
6.1 使用文本编辑器 103
6.2 import的使用 105
6.2.1 import语句 105
6.2.2 使用逗号输出 108
6.3 别样的赋值 108
6.3.1 序列解包 108
6.3.2 链式赋值 109
6.3.3 增量赋值 110
6.4 语句块 111
6.5 条件语句 111
6.5.1 布尔变量的作用 111
6.5.2 if语句 112
6.5.3 else子句 114
6.5.4 elif子句 114
6.5.5 嵌套代码块 115
6.5.6 更多操作 115
6.5.7 断言 118
6.6 循环 118
6.6.1 while循环 119
6.6.3 循环遍历字典元素 122
6.6.4 迭代工具 123
6.6.5 跳出循环 124
6.6.6 循环中的else子句 126
6.7 pass语句 127
6.8 牛刀小试——猜字游戏编写 128
6.9 Python程序调试 129
6.10 问题解答 130
6.11 温故知新,学以致用 131
第7章 函数 133
7.1 调用函数 133
7.2 定义函数 135
7.3 函数的参数 137
7.3.1 必须参数 138
7.3.2 关键字参数 138
7.3.3 默认参数 139
7.3.4 可变参数 142
7.3.5 组合参数 144
7.4 执行流程 144
7.5 形参和实参 145
7.6 变量作用域 146
7.6.1 局部变量 146
7.6.2 全局变量 148
7.7 有返回值和无返回值函数 150
7.8 为什么要有函数 151
7.9 返回函数 151
7.10 递归函数 154
7.11 匿名函数 156
7.12 偏函数 159
7.13 牛刀小试——经典排序之快速排序实现 159
7.14 调试 161
7.15 问题解答 161
7.16 温故知新,学以致用 162
第8章 面向对象编程 164
8.1 理解面向对象 164
8.1.1 什么是面向对象编程 164
8.1.2 面向对象术语简介 164
8.2 类的定义与使用 165
8.2.1 类的定义 165
8.2.2 类的使用 166
8.3 深入类 167
8.3.1 类的构造方法 167
8.3.2 类的访问权限 171
8.4 继承 175
8.5 多态 178
8.6 封装 181
8.7 多重继承 182
8.8 获取对象信息 184
8.9 类的专有方法 187
8.10 牛刀小试——出行建议 191
8.11 调试 193
8.12 问题解答 193
8.13 温故知新,学以致用 194
第9章 异常 196
9.1 什么是异常 196
9.2 异常处理 197
9.3 抛出异常 198
9.4 捕捉多个异常 199
9.5 使用一个块捕捉多个异常 200
9.6 捕捉对象 201
9.7 全捕捉 201
9.8 异常中的else 202
9.9 自定义异常 203
9.10 finally子句 204
9.11 异常和函数 205
9.12 牛刀小试——正常数和异常数 206
9.13 bug的由来 208
9.14 温故知新,学以致用 208
第10章 日期和时间 210
10.1 日期和时间 210
10.1.1 时间戳 210
10.1.2 时间格式化符号 211
10.1.3 struct time元组 212
10.2 time模块 212
10.2.1 time()函数 212
10.2.2 localtime([secs])函数 213
10.2.3 gmtime([secs])函数 213
10.2.4 mktime(t)函数 214
10.2.5 asctime([t])函数 214
10.2.6 ctime([secs])函数 214
10.2.7 sleep(secs)函数 215
10.2.8 clock()函数 215
10.2.9 strftime(format[,t])函数 216
10.2.10 strptime(string[,format])函数 217
10.2.11 三种时间格式转化 217
10.3 datetime模块 217
10.4 日历模块 221
10.5 牛刀小试——时间大杂烩 222
10.6 调试 226
10.7 温故知新,学以致用 226
第11章 正则表达式 228
11.1 认识正则表达式 228
11.2 re模块 230
11.2.1 re.match函数 230
11.2.2 re.search方法 231
11.2.3 re.match与re.search的区别 231
11.3 贪婪模式和非贪婪模式 232
11.4 替换 233
11.5 编译 234
11.6 牛刀小试——匹配比较 234
11.7 温故知新,学以致用 235
第12章 文件操作 237
12.1 打开文件 237
12.1.1 文件模式 239
12.1.2 缓存 239
12.2 基本文件方法 240
12.2.1 读和写 240
12.2.2 读写行 243
12.2.3 关闭文件 244
12.2.4 文件重命名 245
12.2.5 删除文件 246
12.3 对文件内容进行迭代 246
12.3.1 按字节处理 246
12.3.2 按行操作 247
12.3.3 使用fileinput实现懒加载式迭代 247
12.3.4 文件迭代器 248
12.4 StringIO函数 248
12.5 序列化与反序列化 249
12.5.1 一般序列化与反序列化 249
12.5.2 JSON序列化与反序列化 250
12.6 牛刀小试——批量更改文件名 252
12.7 调试 253
12.8 问题解答 254
12.9 温故知新,学以致用 254
第13章 多线程 256
13.1 线程和进程 256
13.1.1 进程 256
13.1.2 线程 256
13.1.3 多线程与多进程 257
13.2 使用线程 258
13.2.1 全局解释器锁 258
13.2.2 退出线程 258
13.2.3 Python的线程模块 259
13.3 thread模块 259
13.4 threading模块 261
13.5 线程同步 265
13.6 线程优先级队列 267
13.7 线程与进程比较 269
13.7.1 线程切换 270
13.7.2 计算密集型与IO密集型 270
13.7.3 异步IO 271
13.8 牛刀小试——多线程简单爬虫 271
13.9 调试 272
13.10 问题解答 273
13.11 温故知新,学以致用 273
第14章 发送和接收电子邮件 275
14.1 电子邮件介绍 275
14.2 发送邮件 277
14.2.1 SMTP发送邮件 277
14.2.2 发送HTML格式的邮件 279
14.2.3 发送带附件的邮件 280
14.2.4 发送图片 281
14.2.5 同时支持HTML和Plain格式 282
14.2.6 加密SMTP 284
14.3 POP3接收邮件 284
14.3.1 POP3下载邮件 285
14.3.2 解析邮件 286
14.4 牛刀小试——邮件发送通用化 287
14.5 调试 290
14.6 问题解答 290
14.7 温故知新,学以致用 290
第15章 网络编程 292
15.1 初识网络编程 292
15.2 TCP/IP简介 292
15.3 网络设计模块 293
15.3.1 Socket简介 294
15.3.2 socket模块 294
15.3.3 socket对象(内建)方法 296
15.4 TCP编程 297
15.4.1 客户端 297
15.4.2 服务器编程 299
15.5 UDP编程 303
15.6 urllib模块 305
15.6.1 GET请求 305
15.6.2 POST请求 306
15.7 牛刀小试——模拟浏览器 307
15.8 调试 308
15.9 问题解答 308
15.10 温故知新,学以致用 308
第16章 GUI编程 310
16.1 GUI简介 310
16.1.1 常用GUI库简介 310
16.1.2 安装tkinter 311
16.2 概念介绍 311
16.2.1 窗口和控件 311
16.2.2 事件驱动处理 312
16.2.3 布局管理器 312
16.3 Tk控件 312
16.3.1 Button控件 313
16.3.2 Checkbutton控件 314
16.3.3 Label控件 315
16.3.4 Text控件 316
16.3.5 Menu控件 317
16.4 tkinter组合控件 319
16.5 牛刀小试——计算器开发 320
16.6 调试 325
16.7 问题解答 325
16.8 温故知新,学以致用 325
第17章 操作数据库 327
17.1 数据库介绍 327
17.2 Python数据库API 328
17.2.1 全局变量 328
17.2.2 异常 329
17.2.3 连接和游标 329
17.2.4 类型 331
17.3 数据库操作 331
17.3.1 数据库连接 331
17.3.2 创建数据库表 332
17.3.3 数据库插入 333
17.3.4 数据库查询 334
17.3.5 数据库更新 335
17.3.6 数据库删除 336
17.4 事务 337
17.5 调试 338
17.6 问题解答 338
17.7 温故知新,学以致用 339
第18章 项目实战——爬虫 340
18.1 了解爬虫 340
18.2 爬虫的原理 341
18.3 爬虫常用的几种技巧 341
18.3.1 基本方法 341
18.3.2 使用代理服务器 342
18.3.3 Cookie处理 342
18.3.4 伪装成浏览器 343
18.3.5 登录 343
18.4 爬虫示例——抓取豆瓣电影Top250影评数据 344
18.4.1 确定URL格式 344
18.4.2 页面抓取 344
18.4.3 提取相关信息 345
18.4.4 写入文件 346
18.4.5 完善代码 346
18.5 项目小结 349
第19章 自然语言分词与词频统计 350
19.1 概念介绍 350
19.1.1 SQLAlchemy简介 350
19.1.2 pyecharts简介 351
19.1.3 jieba分词库简介 351
19.1.4 BeautifulSoup库简介 351
19.2 库的安装与使用 351
19.2.1 SQLAlchemy的安装与使用 351
19.2.2 pyecharts的安装与使用 352
19.2.3 jieba分词库的安装与使用 353
19.2.4 BeautifulSoup的安装与使用 354
19.3 分词与词频统计实战 354
19.3.1 整体结构设计 355
19.3.2 数据结构设计 355
19.3.3 数据的爬取与保存 356
19.3.4 制定关键词库 358
19.3.5 词频统计与图表生成 358
19.4 分词与词频统计完整代码实现与结果查看 359
19.5 项目小结 367
第20章 区块链实战 368
20.1 区块链简介 368
20.1.1 区块链的定义 368
20.1.2 区块链的特点 369
20.1.3 区块链应用行业及领域 369
20.2 区块链代码结构设计 369
20.2.1 环境准备 369
20.2.2 代码结构设计 369
20.3 区块链具体逻辑实现 371
20.3.1 块结构 371
20.3.2 加入交易 372
20.3.3 创建新块 372
20.3.4 工作量证明的理解 374
20.3.5 工作量证明的实现 374
20.4 API接口层开发 375
20.4.1 发送交易 375
20.4.2 挖矿 376
20.4.3 返回整个区块链 376
20.5 运行区块链 377
20.6 分布式实现 378
20.6.1 注册节点 379
20.6.2 实现共识算法 379
20.7 完整项目代码与执行 381
20.8 项目小结 393
附录 394
A.1 数学函数 394
A.2 随机函数 394
A.3 三角函数 395
A.4 Python字符串内建函数 395
A.5 列表方法 397
A.6 字典内置方法 397
A.7 正则表达式模式 398