内容简介
本书是Python编程领域的经典进阶之作,由Google高级软件工程师布雷特·斯拉特金(Brett Slatkin)撰写,旨在帮助开发者写出更高效、更健壮、更可维护的Python代码。原书第2版在原90个有效方法的基础上全面升级,覆盖了Python 3.7及以上版本的新特性,如类型注解、async/await并发编程、f-string改进等,并针对现代开发实践进行了更新。
全书共分为13章,包含90个独立且实用的“有效方法”,每个方法都围绕一个具体主题展开,例如:用Pythonic方式思考、列表与字典的高效用法、函数与装饰器、生成器与迭代器、类与继承、元类与属性、并发与并行、内置模块、测试与调试等。每个方法都配有清晰的代码示例、对比分析和最佳实践建议,帮助读者理解语言背后的设计哲学,避免常见陷阱,并掌握符合Python社区规范的编码风格。
本书特别强调代码的可读性、可测试性和性能优化,适合有一定Python基础、希望提升代码质量的开发者阅读。无论是想系统学习Python高级特性,还是准备面试或团队协作,本书都提供了极具价值的参考。通过这90个经过验证的有效方法,读者不仅能写出更优雅的代码,还能建立起良好的编程思维习惯。
目录
本书赞誉
译者序
第1章 培养Pythonic思维
第1条 查询自己使用的Python版本
第2条 遵循PEP 8风格指南
第3条 了解bytes与str的区别
第4条 用支持插值的f-string取代C风格的格式字符串与str.format方法
第5条 用辅助函数取代复杂的表达式
第6条 把数据结构直接拆分到多个变量里,不要专门通过下标访问
第7条 尽量用enumerate取代range
第8条 用zip函数同时遍历两个迭代器
第9条 不要在for与while循环后面写else块
第10条 用赋值表达式减少重复代码
第2章 列表与字典
第11条 学会对序列做切片
第12条 不要在切片里同时指定起止下标与步进
第13条 通过带星号的unpacking操作来捕获多个元素,不要用切片
第14条 用sort方法的key参数来表示复杂的排序逻辑
第15条 不要过分依赖给字典添加条目时所用的顺序
第16条 用get处理键不在字典中的情况,不要使用in与KeyError
第17条 用defaultdict处理内部状态中缺失的元素,而不要用setdefault
第18条 学会利用__missing__构造依赖键的默认值
第3章 函数
第19条 不要把函数返回的多个数值拆分到三个以上的变量中
第20条 遇到意外状况时应该抛出异常,不要返回None
第21条 了解如何在闭包里面使用外围作用域中的变量
第22条 用数量可变的位置参数给函数设计清晰的参数列表
第23条 用关键字参数来表示可选的行为
第24条 用None和docstring来描述默认值会变的参数
第25条 用只能以关键字指定和只能按位置传入的参数来设计清晰的参数列表
第26条 用functools.wraps定义函数修饰器
第4章 推导与生成
第27条 用列表推导取代map与filter
第28条 控制推导逻辑的子表达式不要超过两个
第29条 用赋值表达式消除推导中的重复代码
第30条 不要让函数直接返回列表,应该让它逐个生成列表里的值
第31条 谨慎地迭代函数所收到的参数
第32条 考虑用生成器表达式改写数据量较大的列表推导
第33条 通过yield from把多个生成器连起来用
第34条 不要用send给生成器注入数据
第35条 不要通过throw变换生成器的状态
第36条 考虑用itertools拼装迭代器与生成器
第5章 类与接口
第37条 用组合起来的类来实现多层结构,不要用嵌套的内置类型
第38条 让简单的接口接受函数,而不是类的实例
第39条 通过@classmethod多态来构造同一体系中的各类对象
第40条 通过super初始化超类
第41条 考虑用mix-in类来表示可组合的功能
第42条 优先考虑用public属性表示应受保护的数据,不要用private属性表示
第43条 自定义的容器类型应该从collections.abc继承
第6章 元类与属性
第44条 用纯属性与修饰器取代旧式的setter与getter方法
第45条 考虑用@property实现新的属性访问逻辑,不要急着重构原有的代码
第46条 用描述符来改写需要复用的@property方法
第47条 针对惰性属性使用__getattr__、__getattribute__及__setattr__
第48条 用__init_subclass__验证子类写得是否正确
第49条 用__init_subclass__记录现有的子类
第50条 用__set_name__给类属性加注解
第51条 优先考虑通过类修饰器来提供可组合的扩充功能,不要使用元类
第7章 并发与并行
第52条 用subprocess管理子进程
第53条 可以用线程执行阻塞式I/O,但不要用它做并行计算
第54条 利用Lock防止多个线程争用同一份数据
第55条 用Queue来协调各线程之间的工作进度
第56条 学会判断什么场合必须做并发
第57条 不要在每次fan-out时都新建一批Thread实例
第58条 学会正确地重构代码,以便用Queue做并发
第59条 如果必须用线程做并发,那就考虑通过ThreadPoolExecutor实现
第60条 用协程实现高并发的I/O
第61条 学会用asyncio改写那些通过线程实现的I/O
第62条 结合线程与协程,将代码顺利迁移到asyncio
第63条 让asyncio的事件循环保持畅通,以便进一步提升程序的响应能力
第64条 考虑用concurrent.futures实现真正的并行计算
第8章 稳定与性能
第65条 合理利用try/except/else/finally结构中的每个代码块
第66条 考虑用contextlib和with语句来改写可复用的try/finally代码
第67条 用datetime模块处理本地时间,不要用time模块
第68条 用copyreg实现可靠的pickle操作
第69条 在需要准确计算的场合,用decimal表示相应的数值
第70条 先分析性能,然后再优化
第71条 优先考虑用deque实现生产者-消费者队列
第72条 考虑用bisect搜索已排序的序列
第73条 学会使用heapq制作优先级队列
第74条 考虑用memoryview与bytearray来实现无须拷贝的bytes操作
第9章 测试与调试
第75条 通过repr字符串输出调试信息
第76条 在TestCase子类里验证相关的行为
第77条 把测试前、后的准备与清理逻辑写在setUp、tearDown、setUp-Module与tearDownModule中,以防用例之间互相干扰
第78条 用Mock来模拟受测代码所依赖的复杂函数
第79条 把受测代码所依赖的系统封装起来,以便于模拟和测试
第80条 考虑用pdb做交互调试
第81条 用tracemalloc来掌握内存的使用与泄漏情况
第10章 协作开发
第82条 学会寻找由其他Python开发者所构建的模块
第83条 用虚拟环境隔离项目,并重建依赖关系
第84条 每一个函数、类与模块都要写docstring
第85条 用包来安排模块,以提供稳固的API
第86条 考虑用模块级别的代码配置不同的部署环境
第87条 为自编的模块定义根异常,让调用者能够专门处理与此API有关的异常
第88条 用适当的方式打破循环依赖关系
第89条 重构时考虑通过warnings提醒开发者API已经发生变化
第90条 考虑通过typing做静态分析,以消除bug
您当前的等级为
登录后免费下载登录
小黑屋反思中,不准下载!
评论后刷新页面下载评论
支付¥以后下载
请先登录
您今天的下载次数(次)用完了,请明天再来
支付积分以后下载立即支付
支付以后下载立即支付
您当前的用户组不允许下载升级会员
您已获得下载权限
您可以每天下载资源次,今日剩余次
免责申明:
1. 本站分享的所有书籍均来源于自互联网,我们只进行收集整理,并不对书籍内容进行更改。
2. 部分书籍中可能有书籍压制者放置的广告,这并不是本站所为,请注意甄别。
3. 我们分享这些书籍,纯粹是出于知识分享的热情,以及对互联网分享精神的高度认同和践行,不以盈利为目的。
4. 本站分享的所有书籍,仅供个人学习研究使用,请勿用于任何商业用途,否则产生的一切法律纠纷与本站无关。
5. 如果这些书籍让你有所收获,在条件允许的情况下,请一定购买正版书籍,这是对创作者最好的支持。
6. 如果您是此书籍的版权所有者,且您不希望此作品出现在本站,请联系我们,我们将在收到您的请求后48小时内予以删除。