| 作者 |
| 苏尼尔·卡皮尔 布雷特·斯拉特金 |
| 丛书名 |
| 华章程序员书库 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782010141450 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------Python代码整洁之道:编写优雅的代码--------------------------- 本书首先介绍格式化编码和代码记录以获得最大可读性的重要性,使用内置数据结构和Python字典提高可维护性,并使用模块和元类有效地组织代码。然后深入研究Python语言的新特性,并学习如何有效地利用它们。接下来,将解码诸如异步编程、Python数据类型、类型提示和路径处理等关键概念。学习在Python代码中调试和执行单元测试和集成测试的技巧,以确保代码可以投入生产。最后介绍用于版本管理、管理实时代码和智能代码完成的必要工具。 ---------------------------Effective Python:编写高质量Python代码的59个有效方法--------------------------- 用Python编写程序,是相当容易的,所以这门语 言非常流行。但若想掌握Python所特有的优势、魅力 和表达能力,则相当困难,而且语言中还有很多隐藏 的陷阱,容易令开发者犯错。 《Effective Python(编写高质量Python代码的 59个有效方法)》可以帮你掌握真正的Pythonic编程 方式,令你能够完全发挥出Python语言的强大功能, 并写出健壮而高效的代码。Scott Meyer's在畅销书 . 《Effective C++》中开创了一种以使用场景为主导 的精练教学方式,本书作者布雷特·斯拉特金就以这 种方式汇聚了59条**的实践原则、开发技巧和便捷 方案,并以实用的代码范例来解释它们。 斯拉特根据自己在Google公司多年开发Python基 础架构所积累的经验,揭示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 ---------------------------Effective Python:编写高质量Python代码的59个有效方法--------------------------- 本书赞誉 译 者 序 前 言 致 谢 第1章 用Pythonic方式来思考 第1条:确认自己所用的Python版本 第2条:遵循PEP 8风格指南 第3条:了解bytes、str与unicode的区别 第4条:用辅助函数来取代复杂的表达式 第5条:了解切割序列的办法 第6条:在单次切片操作内,不要同时指定start、end和stride 第7条:用列表推导来取代map和filter 第8条:不要使用含有两个以上表达式的列表推导 第9条:用生成器表达式来改写数据量较大的列表推导 第10条:尽量用enumerate取代range 第11条:用zip函数同时遍历两个迭代器 第12条:不要在for和while循环后面写else块 第13条:合理利用try/except/else/finally结构中的每个代码块 第2章 函数 第14条:尽量用异常来表示特殊情况,而不要返回None 第15条:了解如何在闭包里使用外围作用域中的变量 第16条:考虑用生成器来改写直接返回列表的函数 第17条:在参数上面迭代时,要多加小心 第18条:用数量可变的位置参数减少视觉杂讯 第19条:用关键字参数来表达可选的行为 第20条:用None和文档字符串来描述具有动态默认值的参数 第21条:用只能以关键字形式指定的参数来确保代码明晰 第3章 类与继承 第22条:尽量用辅助类来维护程序的状态,而不要用字典和元组 第23条:简单的接口应该接受函数,而不是类的实例 第24条:以@classmethod形式的多态去通用地构建对象 第25条:用super初始化父类 第26条:只在使用Mix-in组件制作工具类时进行多重继承 第27条:多用public属性,少用private属性 第28条:继承collections.abc以实现自定义的容器类型 第4章 元类及属性 84 第29条:用纯属性取代get和set方法 第30条:考虑用@property来代替属性重构 第31条:用描述符来改写需要复用的@property方法 第32条:用__getattr__、__getattribute__和__setattr__实现按需生成的属性 第33条:用元类来验证子类 第34条:用元类来注册子类 第35条:用元类来注解类的属性 第5章 并发及并行 第36条:用subprocess模块来管理子进程 第37条:可以用线程来执行阻塞式I/O,但不要用它做平行计算 第38条:在线程中使用Lock来防止数据竞争 第39条:用Queue来协调各线程之间的工作 第40条:考虑用协程来并发地运行多个函数 第41条:考虑用concurrent.futures来实现真正的平行计算 第6章 内置模块 第42条:用functools.wraps定义函数修饰器 第43条:考虑以contextlib和with语句来改写可复用的try/finally代码 第44条:用copyreg实现可靠的pickle操作 第45条:应该用datetime模块来处理本地时间,而不是用time模块 第46条:使用内置算法与数据结构 第47条:在重视精确度的场合,应该使用decimal 第48条:学会安装由Python开发者社区所构建的模块 第7章 协作开发 第49条:为每个函数、类和模块编写文档字符串 第50条:用包来安排模块,并提供稳固的API 第51条:为自编的模块定义根异常,以便将调用者与API相隔离 第52条:用适当的方式打破循环依赖关系 第53条:用虚拟环境隔离项目,并重建其依赖关系 第8章 部署 第54条:考虑用模块级别的代码来配置不同的部署环境 第55条:通过repr字符串来输出调试信息 第56条:用unittest来测试全部代码 第57条:考虑用pdb实现交互调试 第58条:先分析性能,然后再优化 第59条:用tracemalloc来掌握内存的使用及泄漏情况 |