Python应用开发实战
出版时间: 2018
Python是使用较多的动态编程语言之一,应用广泛,学习者众多。本书使用一个生动有趣的、基于文本的游戏主题作为讲解内容来介绍Python应用开发过程的各个方面。全书共10章,涉及简单应用开发、模块化、打包和发布应用的代码、文档规范、单元测试、重构、设计模式、性能监测、性能优化、GUI应用、MVC框架等方方面面的软件开发知识和技能。本书适合有一定Python语言基础,想要快速掌握Python项目开发知识、提高Python开发实战技能的读者学习参考。
目录
- 第1章开发简单应用1
- 1.1重要提示2
- 1.2安装的先决条件2
- 1.2.1安装Python3
- 1.3本书的主题8
- 1.3.1了解本书人物8
- 1.4简单的脚本—兽人之袭
- v0.0.19
- 1.4.1游戏简介—兽人之袭
- v0.0.110
- 1.4.2问题说明10
- 1.4.3伪代码—0.0.1版本10
- 1.4.4代码查看11
- 1.4.5运行兽人之袭v0.0.114
- 1.5使用函数—兽人之袭
- v0.0.514
- 1.5.1重新回顾以前的版本15
- 1.5.2有攻击功能的伪代码—版本0.0.517
- 1.5.3代码查看19
- 1.5.4运行兽人之袭v0.0.521
- 1.6使用面向对象编程—兽人之袭v1.0.022
- 1.6.1功能需求的优先度23
- 1.6.2问题说明24
- 1.6.3重新设计代码24
- 1.6.4描绘整个场景25
- 1.6.5代码查看27
- 1.6.6运行兽人之袭v1.0.031
- 1.7Python中的抽象基类32
- 1.7.1练习33
- 1.8小结34
- 1.8.1对电子书读者非常重要的提示34
- 第2章异常处理36
- 2.1修改兽人之袭v1.0.036
- 2.1.1问题调试37
- 2.1.2bug修复中……38
- 2.2异常39
- 2.2.1什么是异常39
- 2.2.2最常见的异常39
- 2.2.3异常处理40
- 2.2.4异常的抛出和再抛出42
- 2.2.5try...except的else代码块43
- 2.2.6finally...清理吧44
- 2.3回归游戏—兽人之袭
- v1.1.045
- 2.3.1准备工作45
- 2.3.2增加异常处理代码46
- 2.3.3运行兽人之袭v1.1.047
- 2.4自定义异常48
- 2.4.1准备工作48
- 2.4.2自定义异常— 问题所在49
- 2.4.3编写一个新的异常类50
- 2.4.4扩展异常类51
- 2.4.5继承exception类53
- 2.5练习55
- 2.6小结56
- 第3章模块化、包和部署57
- 3.1选择一种版本控制规约58
- 3.1.1连续递增58
- 3.1.2使用日期格式59
- 3.1.3语义版本控制方案59
- 3.2代码模块化60
- 3.2.1兽人之袭v2.0.060
- 3.3创建Python包62
- 3.3.1从包中录入63
- 3.4在PyPI上发布包64
- 3.4.1发行版本准备65
- 3.4.2上传发行版69
- 3.4.3一条命令完成所有的 事情73
- 3.4.4安装你自己的发行版73
- 3.5使用私有的PyPI仓库75
- 3.5.1步骤1—安装 pypiserver75
- 3.5.2步骤2—创建一个新的 源代码发行版75
- 3.5.3步骤3—启动本地 服务器76
- 3.5.4步骤4—安装私有 发行版76
- 3.6创建增量发布77
- 3.6.1打包并上传新版本77
- 3.6.2升级已经安装的版本77
- 3.7代码的版本控制78
- 3.7.1Git资源78
- 3.7.2安装Git78
- 3.7.3配置你的验证信息79
- 3.7.4Git基础术语79
- 3.7.5创建并使用本地仓库80
- 3.8使用Git的GUI客户端83
- 3.9练习84
- 3.10小结85
- 第4章代码文档和最佳实践86
- 4.1编写代码文档87
- 4.1.1文档字符串88
- 4.1.2reStructuredText简介89
- 4.1.3使用RST的文档 字符串92
- 4.1.4文档字符串格式化风格94
- 4.1.5自动生成文档字符串 stubs95
- 4.1.6使用Sphinx生成文档97
- 4.2Python编码标准103
- 4.3代码分析—我们做得 怎么样呢105
- 4.3.1使用IDE进行代码 分析105
- 4.3.2Pylint106
- 4.4练习110
- 4.5小结110
- 第5章单元测试和重构111
- 5.1本章的组织方式111
- 5.1.1重要说明112
- 5.2为何要进行测试112
- 5.2.1提出了一个新的需求112
- 5.2.2你实现了这个功能113
- 5.2.3但是有些事情似乎 不对了……114
- 5.2.4它需要完全测试115
- 5.3单元测试115
- 5.3.1Python的unittest 框架116
- 5.4为应用程序编写单元测试121
- 5.4.1创建测试包121
- 5.4.2为单元测试创建新 的类122
- 5.4.3第1个单元测试— 受伤方的选择123
- 5.4.4运行第1个单元测试124
- 5.4.5第2个单元测试— 占领木屋124
- 5.4.6创建自己的测试模块127
- 5.4.7批量执行单元测试127
- 5.5使用模拟库的单元测试128
- 5.5.1Mock的简介128
- 5.5.2让我们开始Mock吧129
- 5.5.3在单元测试中使用Mock 对象131
- 5.5.4使用补丁133
- 5.5.5第3个单元测试— play方法135
- 5.6你的代码被覆盖到了吗139
- 5.6.1解决导入错误140
- 5.7其他单元测试工具141
- 5.7.1Doctest141
- 5.7.2Nose141
- 5.7.3Pytest142
- 5.8重构的前言142
- 5.8.1绕个弯路—可测试性重构144
- 5.9重构144
- 5.9.1什么是重构145
- 5.9.2为什么要进行重构145
- 5.9.3何时进行重构145
- 5.9.4如何进行重构146
- 5.9.5移动148
- 5.10重新审视单元测试150
- 5.10.1可测试化重构150
- 5.10.2第4个单元测试— setup_game_scenario152
- 5.11练习152
- 5.11.1重构和重新设计练习153
- 5.12小结153
- 第6章设计模式154
- 6.1设计模式的介绍154
- 6.1.1设计模式的分类155
- 6.2Python语言和设计模式156
- 6.2.1一级函数157
- 6.2.2类作为一级对象157
- 6.2.3闭包158
- 6.2.4各种特性159
- 6.2.5鸭子类型160
- 6.3本章余下内容的结构161
- 6.4快进—兽人之袭
- v6.0.0162
- 6.5策略模式164
- 6.5.1策略场景—跳跃 特性164
- 6.5.2策略—主要的问题165
- 6.5.3策略—尝试解决 方案166
- 6.5.4策略—重新考虑 设计168
- 6.5.5策略方案1— 传统方法169
- 6.5.6策略方案2— Python方法172
- 6.6简单工厂174
- 6.6.1简单工厂场景— 招募特性174
- 6.6.2简单工厂— 主要的问题175
- 6.6.3简单工厂—重新 考虑设计176
- 6.6.4简单工厂方案1— 传统方法177
- 6.6.5简单工厂方案2— Python方法178
- 6.7抽象工厂模式180
- 6.7.1抽象工厂场景— 饰品店181
- 6.7.2抽象工厂—主要的 问题184
- 6.7.3抽象工厂—重新考虑 设计184
- 6.7.4抽象工厂方案— Python方法186
- 6.8适配器模式188
- 6.8.1适配器模型—精灵的 远房亲戚189
- 6.8.2适配器—主要的 问题189
- 6.8.3适配器—尝试解决 方案190
- 6.8.4适配器解决方案— Python方法191
- 6.9小结194
- 第7章性能—识别瓶颈195
- 7.1三个性能章节的总览195
- 7.1.1更注重运行时的性能195
- 7.1.2关于性能的第1个 章节196
- 7.1.3关于性能的第2个 章节196
- 7.1.4关于性能的第3个 章节196
- 7.1.5看一下应用性能提升196
- 7.2游戏场景—寻找黄金197
- 7.2.1顶层算法199
- 7.2.2查看最初的代码200
- 7.2.3运行代码202
- 7.3主要的问题203
- 7.4识别瓶颈204
- 7.4.1衡量执行时间204
- 7.4.2监测代码片段的运行 时间205
- 7.4.3代码分析206
- 7.5内存分析212
- 7.5.1memory_profiler包212
- 7.6算法效率和复杂度214
- 7.6.1算法效率214
- 7.6.2算法复杂度214
- 7.7大O符号214
- 7.7.1大O复杂类215
- 7.8小结221
- 第8章性能优化1222
- 8.1本章的前提223
- 8.2本章的组织方式223
- 8.3回顾“寻找黄金”的场景224
- 8.3.1选择问题的数据大小224
- 8.3.2分析最初的代码224
- 8.4优化“寻找黄金”—
- 第1部分225
- 8.4.1调整算法—平方根225
- 8.4.2跳过点操作符228
- 8.4.3使用本地范围230
- 8.5性能优化的一些事项232
- 8.5.1列表推导式233
- 8.5.2记录执行时间234
- 8.5.3字典推导式235
- 8.5.4交换条件块和for 循环235
- 8.5.5在循环中使用try语句236
- 8.5.6选择正确的数据结构237
- 8.5.7collections模块238
- 8.5.8生成器和生成器 表达式241
- 8.5.9itertools模块245
- 8.6练习247
- 8.7小结247
- 第9章性能优化2—NumPy和 并行化248
- 9.1本章的先决条件248
- 9.2本章的组织方式248
- 9.3NumPy的简介249
- 9.3.1安装NumPy250
- 9.3.2创建数组对象250
- 9.3.3简单的数组操作251
- 9.3.4数组切割和索引252
- 9.3.5广播254
- 9.3.6其他功能255
- 9.3.7从哪里能获得更多关于 NumPy的信息262
- 9.4优化“寻找黄金”—
- 第2部分262
- 9.4.1“寻找黄金”优化— 优化四262
- 9.4.2“寻找黄金”优化— 优化五264
- 9.5使用multiprocessing模块的 并行化267
- 9.5.1并行化简介267
- 9.5.2全局解释器锁268
- 9.5.3multiprocessing模块268
- 9.6“寻找黄金”程序并行化271
- 9.6.1重访黄金领地271
- 9.6.2“寻找黄金”优化— 优化六,并行化273
- 9.7进一步阅读277
- 9.7.1JIT编译器277
- 9.8小结278
- 第10章简单的图形应用程序280
- 10.1GUI框架概述281
- 10.1.1Tkinter281
- 10.1.2PyQt281
- 10.1.3PySide282
- 10.1.4Kivy282
- 10.1.5wxPython282
- 10.2GUI编程设计注意事项283
- 10.2.1了解用户的需求283
- 10.2.2开发用户故事283
- 10.2.3简单性和可访问性283
- 10.2.4一致性284
- 10.2.5可预测性和熟悉性284
- 10.2.6其他设计考虑284
- 10.3事件驱动编程284
- 10.3.1事件285
- 10.3.2事件处理285
- 10.3.3事件循环285
- 10.4使用Tkinter进行GUI 编程286
- 10.4.1Tkinter的文件链接286
- 10.4.2Tkinter中的 mainloop()286
- 10.4.3简单GUI应用程序—
- 第1步287
- 10.4.4简单GUI应用程序—
- 第2步289
- 10.4.5Tkinter中的GUI
- 控件290
- 10.4.6布局管理292
- 10.4.7Tkinter中的事件294
- 10.4.8Tkinter中的事件 处理296
- 10.5项目1—兽人之袭
- v10.0.0298
- 10.5.1游戏场景298
- 10.5.2问题声明298
- 10.5.3编写代码299
- 10.5.4运行应用程序305
- 10.6MVC架构306
- 10.6.1模型307
- 10.6.2视图307
- 10.6.3控制器307
- 10.6.4MVC的好处308
- 10.7项目2—兽人之袭
- v10.1.0308
- 10.7.1重新修改HutGame类308
- 10.7.2创建MVC类309
- 10.7.3MVC对象间的通信310
- 10.7.4查看代码314
- 10.7.5Model类315
- 10.7.6View类316
- 10.7.7运行应用程序317
- 10.8测试GUI应用程序317
- 10.8.1测试注意事项318
- 10.9练习319
- 10.10扩展阅读320
-
10.11小结322