代码整洁之道 python_Python代码整洁之道:编写优雅的代码

译者序

前言

致谢

关于作者

关于技术审校者

第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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python猜数字游戏实例_Python案例:猜数字小游戏,由浅入深!

本案例只适合新手,老司机请绕路。 游戏介绍:程序自己有一个数字,用户输入一个数字,两个数字进行比较。 可以学到的知识点:input函数、字符串、while循环、if条件判断语句、break语句。 一、 简单版 猜数字游戏&#xf…

PLSQL

每个语句可加“;”也可以不加“;”但是连在一起执行必须加“;”delete taccorequest;commit;select * from taccorequest;转载于:https://www.cnblogs.com/JackShao/archive/2012/04/30/2476942.html

基于DispatchProxy打造自定义AOP组件

DispatchProxy是微软爸爸编写的一个代理类,基于这个,我扩展了一个AOP组件 暂时不支持依赖注入构造方法,感觉属性注入略显麻烦,暂时没打算支持 基于特性的注入流程 [AttributeUsage(AttributeTargets.Method)]internal class TestA…

算法整理学习(二)

(注:以下算法答案来自网络,自己整理供学习) 3.约瑟夫循环报数出列顺序问题思路:采用循环链表,当然也可以采用数组,像模拟循环队列一样 //方法一: 采用找到一个节点删除一个节点的方式…

python判断ip能否ping通_使用Python测试Ping主机IP和某端口是否开放的实例

使用Python方法比用各种命令方便,可以设置超时时间,到底通不通,端口是否开放一眼能看出来。命令和返回完整权限,可以ping通,端口开放,结果如下:无root权限(省略了ping),端口开放&…

python实现抓取网页上的内容并发送到邮箱

要达到的目的:从特定网页中抓取信息,排版后发送到邮箱中 关键点:下载网页,从网页里抓取出需要的信息HTML排版发送到指定邮箱 实现:1.python下载网页直接用库函数就可以实现from urllib import urlretrievefrom urllib …

Thinkphp 配置不用输入index.php

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/u011186019/article/details/78495461由:http://127.0.0.1/thinkphp/index.php/index/in…

ue4导入倾斜摄影_倾斜摄影建模干货|还怕搞不定CC空三?这里只要5分钟……

关注公众号"三维前沿",持续获取更多操作技巧干货!01Q:空三刚开始就失败?A:考虑以下4种情况:考虑ContextCapture Engine 是否打开,尝试关闭后重新打开;考虑相片数量是否过多…

[html] 如何禁止移动端的左右划动手势?

[html] 如何禁止移动端的左右划动手势? html{touch-action:none;touch-action:pan-y;}个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

python自增_python mysql自增字段AUTO_INCREMENT值的修改方式

在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态。 即删除之前如果有四条数据,删除之后,再添加新的数据,id怎会从5开始。 但是我们显示想…

Python工具

1. sourcetree https://www.cnblogs.com/hoobey/p/7100593.html 2.pycharm 3. anaconda 转载于:https://www.cnblogs.com/ericazy/p/11498959.html

graphpad两组t检验_GraphPad prism -- t检验操作步骤解析~

ZSCIt检验&#xff0c;主要用于样本含量较小(例如 n<30)&#xff0c;总体标准差 σ 未知的正态分布资料&#xff0c;其中又将其分为了配对t检验和成组t检验&#xff0c;那如何利用GraphPad prism进行t检验呢&#xff1f;一、原理及意义配对t检验&#xff1a;又称配对样本均数…

[html] 在两个iframe之间传递参数的方法有哪些?

[html] 在两个iframe之间传递参数的方法有哪些&#xff1f; 通过postMessage与父级通过&#xff0c;父级传递消息通过websocket通信如果是同一个域名下可用stroage&#xff0c;监听storageChange事件通信通过web worker也可通信个人简介 我是歌谣&#xff0c;欢迎和大家一起交…

Java官方操纵byte数组的方式

java官方提供了一种操作字节数组的方法——内存流&#xff08;字节数组流&#xff09;ByteArrayInputStream、ByteArrayOutputStream ByteArrayOutputStream——byte数组合并 /*** 将所有的字节数组全部写入内存中&#xff0c;之后将其转化为字节数组*/public static void main…

python js返回 json_[python爬虫]把js转化成json

有一个优秀的库可以使用————demjson目标链接请求上面链接&#xff0c;会得到如下图的一个js文件我们需要把这个js文件转成为dict&#xff0c;方便提取其中需要的字段(这在爬虫任务中非常常见)失败的方法传统方法通常转js文件为dict的过程&#xff1a;1.先通过切片掐头去尾&…

springboot security 权限不足_springBoot整合springSecurity(零一)

整体结构》》》1&#xff0c;springboot2.0整合springSecurity5.1.12&#xff0c;mysql--->>InnoDB3&#xff0c;持久层我用的是用MybatiysPlus(这里就不写关于这个的了,基本是查)4&#xff0c;web服务不是jar服务5&#xff0c;数据库表》账户表/角色表/权限表/账户角色关…

聊聊PowerJob的OmsLogHandler

序 本文主要研究一下PowerJob的OmsLogHandler OmsLogHandler tech/powerjob/worker/background/OmsLogHandler.java Slf4j public class OmsLogHandler {private final String workerAddress;private final Transporter transporter;private final ServerDiscoveryService …

[html] 为什么移动端页面的设计稿一般是750px/640px呢?

[html] 为什么移动端页面的设计稿一般是750px/640px呢&#xff1f; 750px 代表iphone6或inphone6s 设备的像素(宽) 640px 代表inpone3Gs&#xff0c;inpone4/4s iphone5系列 设备的像素(宽) 其他手机大多数时这两种规格 750px/640px 代表的逻辑像素是 375px/320px&#xff0c;…

m文件中函数的执行顺序

当进行多个GUI协同工作时&#xff0c;要用到uiwait和uiresume函数。此时&#xff0c;理解函数的执行顺序此时是很关键的。 首先理解uiwait和uiresume函数的作用。 uiwait函数&#xff1a;阻塞m文件的执行&#xff0c;直到uiresume解除这种阻塞&#xff1b; uiresume函数&#x…

Java从string数组创建临时文件

//从string数组创建临时文件 private static File createSampleFile(String[] strs) throws IOException {File file File.createTempFile("aws-java-sdk-", ".txt");file.deleteOnExit();Writer writer new OutputStreamWriter(new FileOutputStream(fi…