地址:
https://effectivepython.com/
本书作者BrettSlatkin以使用场景为主导的精练教学方式,汇聚了59条优秀的实践原则、开发技巧和便捷方案,并以实用的代码范例来解释它们。作者根据自己在Google公司多年开发Python基础架构所积累的经验,揭示了Python语言中一些鲜为人知的微妙特性,并给出了能够改善代码功能及运行效率的习惯用法。通过本书,你能够了解到解决关键编程任务所用的佳方式,并学会编写易于理解、便于维护且利于改进的代码。
本书可以帮你掌握真正的Pythonic编程方式,令你能够发挥出Python语言的强大功能,并写出健壮而高效的代码。Scott Meyers在畅销书《Effective C++》中开创了一种以使用场景为主导的精练教学方式,本书作者Brett Slatkin就以这种方式汇聚了59条优秀的实践原则、开发技巧和便捷方案,并以实用的代码范例来解释它们。
Slatkin根据自己在Google公司多年开发Python基础架构所积累的经验,揭示Python语言中一些鲜为人知的微妙特性,并给出了能够改善代码功能及运行效率的习惯用法。通过本书,你能够了解到解决关键编程任务所用的方式,并学会编写易于理解、便于维护且利于改进的代码。本书核心内容包括:
● 涵盖Python 3.x及Python 2.x主要应用领域的实用指南,以及与之配套的详细解释及代码范例。
● 与函数相关的编程建议,这些建议有助于我们写出意图清晰、便于复用且缺陷较少的函数。
● 如何准确地表达类与对象的行为。
● 在使用元类和动态属性时,如何避免错误的用法。
● 更为高效的并发及并行方式。
● 与Python内置模块相关的编程技巧和习惯用法。
● 多人协作时所用的开发工具和实践方式。
● 旨在改善代码质量和程序性能的调试、测试与优化方案。
第 1 章 用 Pythonic 方式来思考 1
第 1 条:确认自己所用的 Python 版本 1
第 3 条:了解 bytes、 str 与 unicode 的区别 5
第 4 条:用辅助函数来取代复杂的表达式 8
第 5 条:了解切割序列的办法 10
第 6 条:在单次切片操作内,不要同时指定 start、 end 和 stride 13
第 7 条:用列表推导来取代 map 和 f ilter 15
第 8 条:不要使用含有两个以上表达式的列表推导 16
第 9 条:用生成器表达式来改写数据量较大的列表推导 18
第 10 条:尽量用 enumerate 取代 range 20
第 11 条:用 zip 函数同时遍历两个迭代器 21
第 12 条:不要在 for 和 while 循环后面写 else 块 23
第 13 条:合理利用 try/except/else/f inally 结构中的每个代码块 25
第 2 章 函数 28
第 14 条:尽量用异常来表示特殊情况,而不要返回 None 28
第 15 条:了解如何在闭包里使用外围作用域中的变量 30
第 16 条:考虑用生成器来改写直接返回列表的函数 35
第 17 条:在参数上面迭代时,要多加小心 37
第 18 条:用数量可变的位置参数减少视觉杂讯 41
第 19 条:用关键字参数来表达可选的行为 43
第 20 条:用 None 和文档字符串来描述具有动态默认值的参数 46
第 21 条:用只能以关键字形式指定的参数来确保代码明晰 49
第 3 章 类与继承 53
第 22 条:尽量用辅助类来维护程序的状态,而不要用字典和元组 53
第 23 条:简单的接口应该接受函数,而不是类的实例 58
第 24 条:以 @classmethod 形式的多态去通用地构建对象 62
第 25 条:用 super 初始化父类 67
第 26 条:只在使用 Mix-in 组件制作工具类时进行多重继承 71
第 27 条:多用 public 属性,少用 private 属性 75
第 28 条:继承 collections.abc 以实现自定义的容器类型 79
第 4 章 元类及属性 84
第 29 条:用纯属性取代 get 和 set 方法 84
第 30 条:考虑用 @property 来代替属性重构 88
第 31 条:用描述符来改写需要复用的 @property 方法 92
第 32 条:用 __getattr__、 __getattribute__ 和 __setattr__ 实现按需生成的属性 97
第 33 条:用元类来验证子类 102
第 34 条:用元类来注册子类 104
第 35 条:用元类来注解类的属性 108
第 5 章 并发及并行 112
第 36 条:用 subprocess 模块来管理子进程 113
第 37 条:可以用线程来执行阻塞式 I/O,但不要用它做平行计算 117
第 38 条:在线程中使用 Lock 来防止数据竞争 121XIV
第 39 条:用 Queue 来协调各线程之间的工作 124
第 40 条:考虑用协程来并发地运行多个函数 131
第 41 条:考虑用 concurrent.futures 来实现真正的平行计算 141
第 6 章 内置模块 145
第 42 条:用 functools.wraps 定义函数修饰器 145
第 43 条:考虑以 contextlib 和 with 语句来改写可复用的 try/f inally 代码 148
第 44 条:用 copyreg 实现可靠的 pickle 操作 151
第 45 条:应该用 datetime 模块来处理本地时间,而不是用 time 模块 157
第 46 条:使用内置算法与数据结构 161
第 47 条:在重视精确度的场合,应该使用 decimal 166
第 48 条:学会安装由 Python 开发者社区所构建的模块 168
第 7 章 协作开发 170
第 49 条:为每个函数、类和模块编写文档字符串 170
第 50 条:用包来安排模块,并提供稳固的 API 174
第 51 条:为自编的模块定义根异常,以便将调用者与 API 相隔离 179
第 52 条:用适当的方式打破循环依赖关系 182
第 53 条:用虚拟环境隔离项目,并重建其依赖关系 187
第 8 章 部署 193
第 54 条:考虑用模块级别的代码来配置不同的部署环境 193
第 55 条:通过 repr 字符串来输出调试信息 195
第 56 条:用 unittest 来测试全部代码 198
第 57 条:考虑用 pdb 实现交互调试 201
第 58 条:先分析性能,然后再优化 203
第 59 条:用 tracemalloc 来掌握内存的使用及泄漏情况 208
专知便捷查看
便捷下载,请关注专知公众号(点击上方蓝色专知关注)
专知,专业可信的人工智能知识分发,让认知协作更快更好!欢迎注册登录专知www.zhuanzhi.ai,获取5000+AI主题干货知识资料!
欢迎微信扫一扫加入专知人工智能知识星球群,获取最新AI专业干货知识教程资料和与专家交流咨询!
点击“
阅读原文
”,了解使用
专知
,查看获取5000+AI主题知识资源