本书从Python 语言的基础语法讲起,逐步深入地介绍了Python各种库,并且介绍了这些库的实战案例,重点介绍了爬虫开发, GUI应用程序开发,容器管理, Redis数据库操作以及数据处理和神经网络方面的内容。让读者不但可以系统地学习Python编程的相关知识,而且还能对Python在各个领域的应用有更为深入的理解。
本书分为21章,涵盖的主要内容有Python语言基础和Python在多个领域的应用。重点介绍了多线程编程; GUI应用程序开发;web编程;爬虫开发;容器管理;数据处理以及神经网络上的应用。
本书内容通俗易懂,案例丰富,实用性强,特别适合Python语言的入门读者和进阶读者阅读,也适合自动化测试人员、自动运维人员阅读。另外,本书也适合作为相关培训机构的教材使用。
封面图
目录
- 前言
- 第1篇 Python编程基础
- 第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 PyCharm9
- 1.3.2 Anaconda10
- 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编程高级主题
- 第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.Lock223
- 9.5.2 线程锁threading.Lock224
- 9.5.3 可重入锁threading.RLock225
- 9.5.4 条件变量threading.Condition227
- 9.5.5 信号量threading.Semaphore228
- 9.5.6 事件threading.Event231
- 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 启动交互式shell422
- 17.10.11 runspider423
- 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章 键值数据库Redis444
- 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和Tkinter469
- 20.1.1 基本程序结构470
- 20.1.2 常用组件471
- 20.1.3 布局487
- 20.1.4 游戏2048489
- 20.2 wxPython494
- 20.2.1 程序基本结构494
- 20.2.2 基本用户界面元素495
- 20.3 PyQt508
- 20.3.1 基本程序结构508
- 20.3.2 常用组件509
- 20.4 小结517
- 第21章 数据处理518
- 21.1 matplotlib518
- 21.2 NumPy526
- 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