Python应用开发实战
Python应用开发实战
技术审校者简介
阅读注意事项
电子书读者注意事项
本书主要内容
阅读本书的准备
本书的目标读者
约定体例
资源与支持
配套资源
与我们联系
关于异步社区和异步图书
1 开发简单应用
1.1 重要提示
1.2 安装的先决条件
安装Python
1.方法1——官方发行版本
2.方法2——捆绑发行版本
3.Python安装位置
类UNIX操作系统
Windows操作系统
4.验证Python安装
5.安装pip
6.安装IPython
7.选择集成开发环境
1.3 本书的主题
了解本书人物
1.4 简单的脚本——兽人之袭v0.0.1
1.4.1 游戏简介——兽人之袭v0.0.1
1.4.2 问题说明
1.4.3 伪代码——0.0.1版本
1.4.4 代码查看
1.4.5 运行兽人之袭v0.0.1
1.5 使用函数——兽人之袭v0.0.5
1.5.1 重新回顾以前的版本
1.5.2 有攻击功能的伪代码——0.0.5版本
1.5.3 代码查看
1.5.4 运行兽人之袭v0.0.5
1.6 使用面向对象编程——兽人之袭v1.0.0
1.6.1 功能需求的优先度
1.6.2 问题说明
1.6.3 重新设计代码
1.6.4 描绘整个场景
1.伪UML表示
2.了解伪UML图表
1.6.5 代码查看
1.6.6 运行兽人之袭v1.0.0
1.7 Python中的抽象基类
练习
1.8 小结
对电子书读者非常重要的提示
2 异常处理
2.1 修改兽人之袭v1.0.0
2.1.1 问题调试
2.1.2 bug修复中……
2.2 异常
2.2.1 什么是异常
2.2.2 最常见的异常
2.2.3 异常处理
2.2.4 异常的抛出和再抛出
2.2.5 try...except的else代码块
2.2.6 finally...清理吧
2.3 回归游戏——兽人之袭v1.1.0
2.3.1 准备工作
2.3.2 增加异常处理代码
2.3.3 运行兽人之袭v1.1.0
2.4 自定义异常
2.4.1 准备工作
2.4.2 自定义异常——问题所在
2.4.3 编写一个新的异常类
2.4.4 扩展异常类
2.4.5 继承exception类
2.5 练习
2.6 小结
3 模块化、打包和部署
3.1 选择一种版本控制规约
3.1.1 连续递增
3.1.2 使用日期格式
3.1.3 语义版本控制方案
3.2 代码模块化
兽人之袭v2.0.0
3.3 创建Python包
从包中导入
3.4 在PyPI上发布包
3.4.1 发行版本准备
1.步骤1——设置包路径
2.步骤2——编写setup.py文件
3.步骤3——更新README和LICENSE.txt文件
4.步骤4——更新MANIFEST.in文件
5.步骤5——构建一个部署就绪版本
3.4.2 上传发行版
1.步骤1——在PyPI测试网站上创建账号
2.步骤2——创建一个.pypirc文件
3.步骤3——注册你的项目
4.步骤4——上传包
3.4.3 一条命令完成所有的事情
3.4.4 安装你自己的发行版
3.5 使用私有的PyPI仓库
3.5.1 步骤1——安装pypiserver
3.5.2 步骤2——创建一个新的源代码发行版
3.5.3 步骤3——启动本地服务器
3.5.4 步骤4——安装私有发行版
3.6 创建增量发布
3.6.1 打包并上传新版本
3.6.2 升级已经安装的版本
3.7 代码的版本控制
3.7.1 Git资源
3.7.2 安装Git
3.7.3 配置你的验证信息
3.7.4 Git基础术语
3.7.5 创建并使用本地仓库
1.创建一个空的远程仓库
2.克隆仓库
3.将代码复制到克隆仓库
4.存储代码及提交
5.推送变更到中央仓库
3.8 使用Git的GUI客户端
3.9 练习
3.10 小结
4 代码文档和最佳实践
4.1 编写代码文档
4.1.1 文档字符串
4.1.2 reStructuredText简介
1.章节的标题
2.段落
3.内联标记
4.代码片段
5.数学公式
6.符号列表和编号列表
4.1.3 使用RST的文档字符串
4.1.4 文档字符串格式化风格
4.1.5 自动生成文档字符串stubs
4.1.6 使用Sphinx生成文档
1.步骤1——使用pip安装Sphinx
2.步骤2——使用cd命令进入源目录
3.步骤3——运行sphinx-quickstart
4.步骤4——更新conf.py
5.步骤5——运行sphinx-apidoc
6.步骤6——建立文档
4.2 Python编码标准
4.3 代码分析——我们做得怎么样呢
4.3.1 使用IDE进行代码分析
4.3.2 Pylint
1.Pylint实践
2.PEP8和AutoPEP8
4.4 练习
4.5 小结
5 单元测试和重构
5.1 本章的组织方式
重要说明
5.2 为何要进行测试
5.2.1 提出了一个新的需求
5.2.2 你实现了这个功能
5.2.3 但是有些事情似乎不对了……
5.2.4 它需要完全测试
5.3 单元测试
Python的unittest框架
1.基本术语
2.使用unittest.TestCase来创建测试
3.控制测试执行
4.使用unittest.TestSuite
5.4 为应用程序编写单元测试
5.4.1 创建测试包
5.4.2 为单元测试创建新的类
5.4.3 第1个单元测试——受伤方的选择
5.4.4 运行第1个单元测试
5.4.5 第2个单元测试——占领木屋
只运行第2个单元测试
5.4.6 创建自己的测试模块
5.4.7 批量执行单元测试
5.5 使用模拟库的单元测试
5.5.1 Mock的简介
5.5.2 让我们开始Mock吧
5.5.3 在单元测试中使用Mock对象
5.5.4 使用补丁
在单元测试中使用补丁
5.5.5 第3个单元测试——play方法
5.6 你的代码被覆盖到了吗
解决导入错误
5.7 其他单元测试工具
5.7.1 Doctest
5.7.2 Nose
5.7.3 Pytest
5.8 重构的前导
绕个弯路——可测试性重构
5.9 重构
5.9.1 什么是重构
5.9.2 为什么要进行重构
5.9.3 何时进行重构
5.9.4 如何进行重构
1.重命名
2.提取
5.9.5 移动
1.下降
2.提升
3.Python的重构工具
5.10 重新审视单元测试
5.10.1 可测试化重构
5.10.2 第4个单元测试——setup_game_scenario
5.11 练习
重构和重新设计练习
5.12 小结
6 设计模式
6.1 设计模式的介绍
设计模式的分类
1.行为模式
2.构建模式
3.结构模式
4.并行模式
6.2 Python语言和设计模式
6.2.1 一级函数
6.2.2 类作为一级对象
6.2.3 闭包
6.2.4 各种特性
1.类方法
2.抽象方法
3._ getattr _方法
6.2.5 鸭子类型
6.3 本章余下内容的结构
6.4 快进——兽人之袭 v6.0.0
6.5 策略模式
6.5.1 策略场景——跳跃特性
6.5.2 策略——主要的问题
6.5.3 策略——尝试解决方案
6.5.4 策略——重新考虑设计
6.5.5 策略方案1——传统方法
6.5.6 策略方案2——Python方法
6.6 简单工厂
6.6.1 简单工厂场景——招募特性
6.6.2 简单工厂——主要的问题
6.6.3 简单工厂——重新考虑设计
6.6.4 简单工厂方案1——传统方法
6.6.5 简单工厂方案2——Python方法
6.7 抽象工厂模式
6.7.1 抽象工厂场景——饰品店
6.7.2 抽象工厂——主要的问题
6.7.3 抽象工厂——重新考虑设计
进一步简化设计
6.7.4 抽象工厂方案——Python方法
高级话题——强制使用接口
6.8 适配器模式
6.8.1 适配器模型——精灵的远房亲戚
6.8.2 适配器——主要的问题
6.8.3 适配器——尝试解决方案
6.8.4 适配器解决方案——Python方法
适配器——多适配器方法
6.9 小结
7 性能——识别瓶颈
7.1 关于性能的三章概览
7.1.1 更注重运行时的性能
7.1.2 关于性能的1个
7.1.3 关于性能的2个
7.1.4 关于性能的3个
7.1.5 看一下应用性能提升
7.2 游戏场景——寻找黄金
7.2.1 顶层算法
7.2.2 查看最初的代码
7.2.3 运行代码
7.3 主要的问题
7.4 识别瓶颈
7.4.1 衡量执行时间
7.4.2 监测代码片段的运行时间
7.4.3 代码分析
1.cProfile模块
2.pstats模块
3.line_profiler包
7.5 内存分析
memory_profiler包
7.6 算法效率和复杂度
7.6.1 算法效率
7.6.2 算法复杂度
7.7 大O符号
大O复杂类
1.O(1)——常数时间
2.O(log n)——对数
3.O(n)——线性时间
4.O(n log n)——对数线性
5.O(n2)——二次方
6.O(n3)——立方
7.复杂度的上限
8.常见数据结构和算法的复杂性
9.结束关于大O的讨论
7.8 小结
8 性能优化1
8.1 本章的前提
8.2 本章的组织方式
8.3 回顾“寻找黄金”的场景
8.3.1 选择问题的数据大小
8.3.2 分析最初的代码
8.4 优化“寻找黄金”——第1部分
8.4.1 调整算法——平方根
“寻找黄金”优化——优化一
8.4.2 跳过点操作符
“寻找黄金”优化——优化二
8.4.3 使用本地范围
“寻找黄金”优化——优化三
8.5 性能优化的一些事项
8.5.1 列表推导式
8.5.2 记录执行时间
8.5.3 字典推导式
8.5.4 交换条件块和for循环
8.5.5 在循环中使用try语句
8.5.6 选择正确的数据结构
8.5.7 collections模块
1.deque类
2.defaultdict类
8.5.8 生成器和生成器表达式
1.生成器表达式
2.比较内存效率
3.生成器表达式还是列表推导式呢
8.5.9 itertools模块
itertools.chain迭代器
8.6 练习
8.7 小结
9 性能优化2——NumPy和并行化
9.1 本章的先决条件
9.2 本章的组织方式
9.3 NumPy的简介
9.3.1 安装NumPy
9.3.2 创建数组对象
9.3.3 简单的数组操作
9.3.4 数组切割和索引
1.索引
2.切割
9.3.5 广播
9.3.6 其他功能
1.numpy.ndarray.tolist
2.numpy.reshape
3.numpy.random
4.numpy.dstack
5.numpy.einsum
6.使用einsum来计算距离的平方
9.3.7 从哪里能获得更多关于NumPy的信息
9.4 优化“寻找黄金”——第2部分
9.4.1 “寻找黄金”优化——优化四
9.4.2 “寻找黄金”优化——优化五
9.5 使用multiprocessing模块的并行化
9.5.1 并行化简介
1.共享内存并行化
2.分布式内存并行
9.5.2 全局解释器锁
9.5.3 multiprocessing模块
Pool类
9.6 “寻找黄金”程序并行化
9.6.1 重访黄金领地
9.6.2 “寻找黄金”优化——优化六,并行化
其他并行化的方法
9.7 进一步阅读
JIT编译器
GPU加速计算
9.8 小结
10 简单的图形应用程序
10.1 GUI框架概述
10.1.1 Tkinter
10.1.2 PyQt
10.1.3 PySide
10.1.4 Kivy
10.1.5 wxPython
10.2 GUI编程设计注意事项
10.2.1 了解用户的需求
10.2.2 开发用户故事
10.2.3 简单性和可访问性
10.2.4 一致性
10.2.5 可预测性和熟悉性
10.2.6 其他设计考虑
10.3 事件驱动编程
10.3.1 事件
10.3.2 事件处理
10.3.3 事件循环
10.4 使用Tkinter进行GUI编程
10.4.1 Tkinter的文件链接
10.4.2 Tkinter中的mainloop()
10.4.3 简单GUI应用程序——第1步
10.4.4 简单GUI应用程序——第2步
10.4.5 Tkinter中的GUI控件
10.4.6 布局管理
1.网格布局管理器
2.包几何管理器
3.位置几何管理器
10.4.7 Tkinter中的事件
1.事件类型
2.事件描述器
3.事件对象属性
10.4.8 Tkinter中的事件处理
1.命令回调(按钮控件)
2.bind()方法
3.bind_class()方法
4.bind_all()方法
10.5 项目1——兽人之袭 v10.0.0
10.5.1 游戏场景
10.5.2 问题声明
10.5.3 编写代码
1.看一下HutGame类
2._ init _方法
3.occupy_huts方法
4.create_widgets方法
5.setup_layout方法
6.radio_btn_pressed方法和enter_hut方法
7.announce_winner方法
10.5.4 运行应用程序
10.6 MVC架构
10.6.1 模型
10.6.2 视图
10.6.3 控制器
10.6.4 MVC的好处
10.7 项目2——兽人之袭 v10.1.0
10.7.1 重新修改HutGame类
10.7.2 创建MVC类
10.7.3 MVC对象间的通信
1.控制器到模型或视图的通信
2.模型到控制器的通信
3.PyPubSub包
4.视图到控制器的通信
5.视图和模型间的通信
10.7.4 查看代码
Controller类
10.7.5 Model类
10.7.6 View类
10.7.7 运行应用程序
10.8 测试GUI应用程序
测试注意事项
1.单元测试和MVC
2.手动测试
3.自动GUI测试
10.9 练习
10.10 扩展阅读
10.11 小结
思维导图
防止博客图床图片失效,防止图片源站外链:
http://www.processon.com/chart_image/5e5b2da6e4b0541c5e148a91.png)
思维导图在线编辑链接: