《Effective Python》读书笔记14: 附录 - 90条建议完整列表

作者: andylin02
学习章节: 全书90条建议速查表
关键词: Effective Python, 90条建议, Python进阶, 最佳实践


《Effective Python(第2版)》90条建议完整列表

第1章:培养Pythonic思维(第1条~第10条)

  • 第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条~第18条)

  • 第11条:掌握切片操作
  • 第12条:避免在切片中同时指定起止和步进
  • 第13条:使用带星号的解包操作来捕获不确定数量的元素
  • 第14条:用key参数处理复杂的排序逻辑
  • 第15条:不要过分依赖字典的插入顺序
  • 第16条:用get处理缺失的字典键
  • 第17条:用defaultdict处理缺失的字典键,而不是setdefault
  • 第18条:通过实现__missing__方法构造依赖键的默认值

第3章:函数(第19条~第26条)

  • 第19条:不要把函数返回的多个值拆分到三个以上变量中
  • 第20条:遇到意外状况时应该抛出异常,不要返回None
  • 第21条:了解如何在闭包里面使用外围作用域中的变量
  • 第22条:用数量可变的位置参数给函数设计清晰的参数列表
  • 第23条:用关键字参数给函数设计清晰的参数列表
  • 第24条:用None和文档字符串来描述动态默认参数
  • 第25条:用仅限关键字参数和位置参数来设计清晰的函数接口
  • 第26条:用functools.wraps定义函数装饰器

第4章:推导与生成(第27条~第36条)

  • 第27条:用列表推导取代map与filter
  • 第28条:在推导式中避免使用超过两个控制子表达式
  • 第29条:用赋值表达式消除推导中的重复计算
  • 第30条:考虑用生成器代替返回列表
  • 第31条:当心迭代器参数的多次遍历
  • 第32条:对于大数据量的推导,考虑用生成器表达式
  • 第33条:用yield from组合多个生成器
  • 第34条:不要用send向生成器注入数据
  • 第35条:不要用throw改变生成器的状态
  • 第36条:考虑用itertools来拼合迭代器与生成器

第5章:类与接口(第37条~第43条)

  • 第37条:用组合代替多层嵌套的内置类型
  • 第38条:让简单的接口接受函数,而不是类的实例
  • 第39条:使用@classmethod实现多态构造
  • 第40条:用super来初始化父类
  • 第41条:使用Mixin类来混合功能
  • 第42条:优先使用公有属性,而非私有属性
  • 第43条:继承collections.abc来定制容器类型

第6章:元类与属性(第44条~第51条)

  • 第44条:用纯属性取代getter和setter方法
  • 第45条:使用@property替代属性重构
  • 第46条:用描述符复用@property验证逻辑
  • 第47条:使用__getattr__实现惰性属性
  • 第48条:使用__init_subclass__验证子类定义
  • 第49条:使用__init_subclass__注册已有的类
  • 第50条:使用__set_name__为类属性加上注解
  • 第51条:优先使用类装饰器而不是元类

第7章:并发与并行(第52条~第59条)

  • 第52条:明白线程、子进程与协程的区别
  • 第53条:使用threading处理阻塞式I/O,但避开GIL限制
  • 第54条:使用multiprocessing绕过GIL,实现真正并行
  • 第55条:使用asyncio编写高并发I/O程序
  • 第56条:使用Queue协调线程之间的工作
  • 第57条:使用concurrent.futures简化并发执行
  • 第58条:避免竞态条件
  • 第59条:避免死锁

第8章:稳定性与性能(第60条~第68条)

  • 第60条:用raise合理利用异常
  • 第61条:使用raise from表达异常链
  • 第62条:使用with语句管理资源和上下文
  • 第63条:使用tracemalloc追踪内存使用
  • 第64条:使用timeit和cProfile分析性能
  • 第65条:使用__slots__减少内存开销
  • 第66条:了解字符串驻留与intern
  • 第67条:用弱引用防止内存泄漏
  • 第68条:正确选择和实现容器

第9章:测试与调试(第69条~第76条)

  • 第69条:使用unittest编写测试
  • 第70条:用setUp与tearDown隔离测试
  • 第71条:使用Mock测试复杂依赖
  • 第72条:封装依赖以便于模拟
  • 第73条:使用交互式调试器
  • 第74条:使用内置的pdb模块
  • 第75条:用repr字符串输出调试信息
  • 第76条:使用tracemalloc追踪内存泄漏

第10章:协作开发(第77条~第90条)

  • 第77条:用包来组织代码
  • 第78条:使用恰当的导入方式
  • 第79条:用__all__控制导出的内容
  • 第80条:小心在包的__init__中导入模块
  • 第81条:尊重标准库
  • 第82条:用一致的风格编写文档字符串
  • 第83条:为每个函数、类和模块编写文档字符串
  • 第84条:保持模块名称简单且唯一
  • 第85条:使用main函数
  • 第86条:定义经过良好测试的稳定API接口
  • 第87条:了解模块级别的可执行代码
  • 第88条:让代码兼容多个Python版本
  • 第89条:使用虚拟环境隔离依赖
  • 第90条:检查包的发行版是否正确

本文为个人学习笔记,仅用于知识分享。如有错误,欢迎指正。
👍🏻 点赞 + 收藏 + 分享,让更多开发者看到这篇深度解析!❤️ 如果觉得有用,请给个赞支持一下作者!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

andylin02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值