译者序

前言

致谢

关于作者

关于技术审校者

第1章 关于Python的思考1

1.1 编写Python代码1

1.1.1 命名2

1.1.2 代码中的表达式和语句5

1.1.3 拥抱Python编写代码的方式8

1.2 使用文档字符串14

1.2.1 模块级文档字符串17

1.2.2 使类文档字符串具有描述性17

1.2.3 函数文档字符串18

1.2.4 一些有用的文档字符串工具19

1.3 编写Python的控制结构20

1.3.1 使用列表推导20

1.3.2 不要使用复杂的列表推导21

1.3.3 应该使用lambda吗23

1.3.4 何时使用生成器与何时使用列表推导23

1.3.5 为什么不要在循环中使用else24

1.3.6 为什么range函数在Python 3中更好27

1.4 引发异常28

1.4.1 习惯引发异常28

1.4.2 使用finally来处理异常30

1.4.3 创建自己的异常类31

1.4.4 只处理特定的异常32

1.4.5 小心第三方的异常34

1.4.6 try最少的代码块35

1.5 小结36

第2章 数据结构38

2.1 常用数据结构38

2.1.1 使用集合38

2.1.2 返回和访问数据时使用namedtuple40

2.1.3 理解str、Unicode和byte43

2.1.4 谨慎使用列表,优先使用生成器44

2.1.5 使用zip处理列表47

2.1.6 使用Python的内置函数48

2.2 使用字典50

2.2.1 何时使用字典与何时使用其他数据结构51

2.2.2 collections51

2.2.3 有序字典、默认字典、普通字典54

2.2.4 使用字典的switch语句55

2.2.5 合并两个字典的方法56

2.2.6 优雅地打印字典57

2.3 小结58

第3章 编写更好的函数和类59

3.1 函数59

3.1.1 编写小函数60

3.1.2 返回生成器61

3.1.3 引发异常替代返回None63

3.1.4 使用默认参数和关键字参数64

3.1.5 不要显式地返回None66

3.1.6 编写函数时注意防御68

3.1.7 单独使用lambda表达式70

3.2 类72

3.2.1 类的大小72

3.2.2 类结构73

3.2.3 正确地使用@property75

3.2.4 什么时候使用静态方法77

3.2.5 继承抽象类79

3.2.6 使用@classmethod来访问类的状态80

3.2.7 使用公有属性代替私有属性81

3.3 小结83

第4章 使用模块和元类84

4.1 模块和元类84

4.2 如何使用模块组织代码86

4.3 使用__init__文件88

4.4 以正确的方式从模块导入函数和类90

4.5 何时使用元类92

4.6 使用__new__方法验证子类93

4.7 __slots__的用途95

4.8 使用元类改变类的行为98

4.9 Python描述符100

4.10 小结102

第5章 装饰器和上下文管理器104

5.1 装饰器105

5.1.1 装饰器及其作用105

5.1.2 理解装饰器106

5.1.3 使用装饰器更改行为108

5.1.4 同时使用多个装饰器110

5.1.5 使用带参数的装饰器111

5.1.6 考虑使用装饰器库112

5.1.7 用于维护状态和验证参数的类装饰器114

5.2 上下文管理器117

5.2.1 上下文管理器及用途117

5.2.2 理解上下文管理器119

5.2.3 使用contextlib创建上下文管理器120

5.2.4 上下文管理器的示例121

5.3 小结124

第6章 生成器与迭代器125

6.1 使用生成器和迭代器125

6.1.1 理解迭代器125

6.1.2 什么是生成器128

6.1.3 何时使用迭代器129

6.1.4 使用itertools130

6.1.5 为什么生成器非常有用132

6.1.6 列表推导和迭代器133

6.2 使用yield关键字133

6.2.1 yield from135

6.2.2 yield相比数据结构更快135

6.3 小结136

第7章 使用Python的新特性137

7.1 异步编程137

7.1.1 Python中的async138

7.1.2 asyncio是如何工作的141

7.1.3 异步生成器151

7.2 类型标注159

7.2.1 Python中的类型160

7.2.2 typing模块160

7.2.3 类型检查会影响性能吗163

7.2.4 类型标注如何帮助编写更好的代码163

7.2.5 typing的陷阱163

7.3 super()方法164

7.4 类型提示164

7.5 使用pathlib处理路径164

7.6 print()现在是一个函数165

7.7 f-string165

7.8 关键字参数166

7.9 保持字典数据的顺序166

7.10 迭代解包166

7.11 小结167

第8章 调试和测试Python代码168

8.1 调试168

8.1.1 调试工具169

8.1.2 breakpoint172

8.1.3 在产品代码中使用logging模块替代print172

8.1.4 使用metrics库来分析性能瓶颈177

8.1.5 IPython有什么帮助178

8.2 测试179

8.2.1 测试非常重要179

8.2.2 Pytest和UnitTest180

8.2.3 属性测试184

8.2.4 生成测试报告184

8.2.5 自动化单元测试185

8.2.6 让代码为生产做好准备186

8.2.7 在Python中执行单元和集成测试186

8.3 小结189

附录 一些很棒的Python工具190

代码整洁之道 python_Python代码整洁之道:编写优雅的代码相关推荐

  1. Python好书推荐《Python代码整洁之道》——编写优雅的代码

    前言 Python是当今最流行的语言之一.相对较新的领域如数据科学.人工智能.机器人和数据分析,以及传统的专业如Web开发和科学研究等,都在拥抱Python.随着时间的推移,Python有可能会发展成 ...

  2. Go Code Review Comments 翻译 编写优雅golang代码

    Gofmt 在 Go 代码上运行 gofmt 以自动修复大多数的机械性风格问题.几乎所有不正规的 Go 代码都在使用gofmt.本文档的剩余部分涉及非机械性风格问题. 另一种方法是使用 goimpor ...

  3. 如何编写优雅的代码:06. 设计模式应用案例(上)

    前文一共介绍了四人帮(Gang of Four)总结的的11个设计模式,对初学者而言,光看文字描述和UML类图略显抽象.本着Learning in Doing的原则,本文将举一些实际的业务需求场景,以 ...

  4. 如何编写优雅的代码:07. 设计模式应用案例(下)

    前文用C#代码实现了Facade模式.Adapter模式.Strategy模式.Bridge模式和Abstract Factory模式解决实际业务需求.本文将继续以C#代码为例,实现我在前面介绍的11 ...

  5. 用c语言写代码_教你如何用android mvp分层架构优雅写代码

    背景 看了好多android技术博客,写android分层架构的博客越来越多,有mvc.mvp.mvvm.clean等各式各样的,而mvp异常火热,然而每个人对mvp的定义又是不同,写法自然也是千紫万 ...

  6. 软件工程师,要么不写代码,要么就写优雅的代码

    何为优雅的代码 优雅的代码,至少需要遵循以下几个原则: 遵守规范 优雅的代码,首先让人看起来就是很整洁的.而这种整洁,则来源于代码规范.严格地遵守代码规范,是提高且保证代码质量的最有效方法.从个人开发 ...

  7. 如何编写无法维护的代码_编写可维护的前端代码

    点击这里获得更好的阅读体验​github.com 以下是本人在团队内部分享的整理和补充,水平有限,如有错误,请不吝赐教. 大家好,我叫王力国,目前是 RPA 前端团队负责人,过去一年我们从零构建了 R ...

  8. [转]新兵训练营系列课程——编写优雅代码

    原文:http://weibo.com/p/1001643877361430185536 课程大纲 什么是好代码 如何编写优雅的代码 如何做出优雅的设计 如何规划合理的架构 如何处理遗留代码 什么是好 ...

  9. 谈代码整洁之道,如何写出优雅的代码

    最近为了制定团队的代码规范,拜读了鲍勃大叔的<代码整洁之道>,读完之后,在如何写出整洁优雅的高质量代码方面有很大的启发.我认为<代码整洁之道>是我们提高编程能力和自我修养必读之 ...

  10. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

最新文章

  1. 修复“-bash: locate: command not found”
  2. 分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据
  3. postman+newman+jenkins环境部署
  4. 图的储存方式,链式前向星最简单实现方式 (边集数组)
  5. 外媒:iPhone 14全系有望配备120Hz ProMotion显示屏
  6. 把dataset作为一个xml文件传给客户端
  7. sql里的正则表达式
  8. OA办公系统能帮助企业做些什么?
  9. matlab乘除号怎么打,matlab中的乘除法
  10. Peta数据集识别性别
  11. 仿网易LOFTER视差滚动列表
  12. “不能read和written”的关键因素—内存
  13. JS实现函数递归、运用技巧
  14. 微信小程序 image图片组件实现宽度固定 高度自适应
  15. Linux数据库管理与应用
  16. qt抽屉菜单_Python PyQt4实现QQ抽屉效果
  17. Java基础(19)IO流
  18. UltraISO 制作U盘镜像步骤
  19. 【FPGA】:ip核--Divider(除法器)
  20. 分享一些前端开发者需要知道的 API 接口常识

热门文章

  1. DreamweaverCS6手把手教你安装并破解
  2. 酒浓码浓 - js / 前端 / 支付宝,微信合并二维码功能
  3. kaggle注册没有验证码
  4. 想要好用的录音转文字软件?推荐三款音频转文字软件免费版
  5. 字符集,字体,编码,代码页,输入法
  6. K8S Java客户端的帮助文档
  7. 大数据技术原理与应用 第三版 林子雨 期末复习(一)大数据概述 第一章 P2
  8. 【拉普拉斯变换】3. 拉普拉斯逆变换
  9. imx8 usb otg模式切换
  10. 还不会财务管理分析?Python爬取全网财务分析数据