当前位置: 首页 > news >正文

《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条:检查包的发行版是否正确

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

http://www.jsqmd.com/news/1072801/

相关文章:

  • 鸿蒙PC中使用ohos-sdk完成Rust适配,自动签名编译安装第三方库walkdir是 Rust 递归遍历目录的专用库
  • 第34章:自动化代码评审Agent——自动审查PR并给出建议
  • AI调试助手EAP谱试,连接周期从2天到3小时
  • 一篇文章带你入门漏洞靶场:从 0 到 1 玩转 bWAPP(附完整安装教程)
  • ChatGPT 转 pdf 怎么压缩但清晰,AI 导出鸭平衡体积与清晰度,告别文档臃肿问题
  • Codex CLI-03-AGENTS.md 编写指南:让 AI 理解你的项目
  • 屏幕截图文字识别工具帮你屏幕截图取字
  • 论文分享➲ arXiv2026 | H2HMem: A Multimodal Memory Benchmark for Agents in Human-Human Interactions
  • 鸿蒙PC适配llvm-gcc-compat编译安装第三方库convert_case,打造Rust 第三方字符串命名风格互相转换
  • 5分钟搞定OpenCode Go套餐无缝接入Claude Code,性价比直接起飞!
  • 鸿蒙 PC使用ohos-pip-autosign激活自动签名工具,安装第三方库arrow实现Python人性化时间处理库
  • 嵌入式linux学习记录十四、术语
  • 第二章 基本数据类型及其操作4
  • SoK: Taxonomy and Evaluation of Prompt Security in Large Language Models
  • 智谱清言能生成 word 吗?AI 导出鸭一站式搞定文档导出难题
  • 31. 完美转发:将参数原样传递
  • 在MacOS上如何安装配置工时通
  • 驱动更新工具
  • 第30章 「对称破缺」—— 悦儿篇
  • Agent 到底是什么?它不是会聊天的 AI,而是会执行任务的系统
  • 古籍版本流传信息目录页爬取实战:用 Python 抽取书名、版本、刊刻年代、藏馆与链接
  • 计算机毕业设计之高校社团管理网站
  • HoRain云--R循环实战:从语法到高效向量化技巧
  • 【C++】new/delete 还是 malloc/free?C++内存管理的“世纪抉择
  • 大型电网企业数字化转型全解析:从国网顶层战略到基层落地实践深度剖析(PPT)
  • 第31章:构建自定义Code Agent——打造专属的代码助手
  • 使用 Python 调用商品条形码查询API并解析商品信息
  • FAST-LIVO2 源码精读(九):VoxelMap 体素地图——哈希索引与八叉树平面拟合
  • 西瓜/甜瓜智能病虫害防控喷雾机上位机 Qt信创完整项目
  • 计算机网络基础:实时运输协议 RTP