one-python-craftsman

one-python-craftsman

Python工匠系列 精进编程技艺

该项目系统地介绍Python编程的关键技巧和最佳实践。涉及主题包括代码风格、数据处理、函数设计、异常管理等核心领域。通过实例讲解,项目旨在提升开发者的编程能力,培养编写高质量Python代码的技能。内容还包括面向对象编程原则,为读者提供全面的Python进阶学习资源。

Python编程技巧面向对象代码质量设计原则Github开源项目

《Python 工匠》图书首页上线啦!共有 3 章在线内容,欢迎阅读。

图书《Python 工匠:案例、技巧与工程实践》现已正式上市。同开源文章相比,图书的知识结构更为流畅,增加了“函数”“面向对象编程”等核心章节,总内容量几乎翻倍,欢迎购买。

<img height="300px" src="https://github.com/piglei/one-python-craftsman/assets/731266/256a6af5-2eab-4f32-ad8e-aff590836bc2" />

点击购买 | 豆瓣书评 | 图灵社区


『Python 工匠』是什么?

我一直觉得编程某种意义上是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目。

在雕琢代码的过程中,有大工程:比如应该用什么架构、哪种设计模式。也有更多的小细节,比如何时使用异常(Exceptions)、或怎么给变量起名。那些真正优秀的代码,正是由无数优秀的细节造就的。

『Python 工匠』这个系列文章,是我的一次小小尝试。它专注于分享 Python 编程中的一些偏 『小』 的东西。希望能够帮到每一位编程路上的匠人。

文章列表

如果你觉得读 GitHub 文件不太方便,也可以访问这个镜像站点阅读所有文章(由 @pengzhangzhi 搭建)。

也欢迎你关注我的微信公众号:piglei,在第一时间阅读最新文章:

<img src="https://user-images.githubusercontent.com/731266/54093209-2edced80-43d0-11e9-8e69-764f5da8b275.png" />

所有文章禁止转载,如需转载请通过微信公众号联系我。

详细内容

1. 善用变量改善代码质量

  • 如何为变量起名
    • 1 - 变量名要有描述性,不能太宽泛
    • 2 - 变量名最好让人能猜出类型
      • 『什么样的名字会被当成 bool 类型?』
      • 『什么样的名字会被当成 int/float 类型?』
      • 其他类型
    • 3 - 适当使用『匈牙利命名法』
    • 4 - 变量名尽量短,但是绝对不要太短
      • 使用短名字的例外情况
    • 5 - 其他注意事项
  • 更好的使用变量
    • 1 - 保持一致性
    • 2 - 尽量不要用 globals()/locals()
    • 3 - 变量定义尽量靠近使用
    • 4 - 合理使用 namedtuple/dict 来让函数返回多个值
    • 5 - 控制单个函数内的变量数量
    • 6 - 及时删掉那些没用的变量
    • 7 - 能不定义变量就不定义
  • 结语

2. 编写条件分支代码的技巧

  • 最佳实践
    • 1 - 避免多层分支嵌套
    • 2 - 封装那些过于复杂的逻辑判断
    • 3 - 留意不同分支下的重复代码
    • 4 - 谨慎使用三元表达式
  • 常见技巧
    • 1 - 使用“德摩根定律”
    • 2 - 自定义对象的“布尔真假”
    • 3 - 在条件判断中使用 all() / any()
    • 4 - 使用 try/while/for 中 else 分支
  • 常见陷阱
    • 1 - 与 None 值的比较
    • 2 - 留意 and 和 or 的运算优先级
  • 结语
  • 注解

3. 使用数字与字符串的技巧

  • 最佳实践
    • 1 - 少写数字字面量
      • 使用 enum 枚举类型改善代码
    • 2 - 别在裸字符串处理上走太远
    • 3 - 不必预计算字面量表达式
  • 实用技巧
    • 1 - 布尔值其实也是“数字”
    • 2 - 改善超长字符串的可读性
      • 当多级缩进里出现多行字符串时
    • 3 - 别忘了那些 “r” 开头的内建字符串函数
    • 4 - 使用“无穷大” float("inf")
  • 常见误区
    • 1 - “value += 1” 并非线程安全
    • 2 - 字符串拼接并不慢
  • 结语

4. 容器的门道

  • 底层看容器
    • 写更快的代码
      • 1 - 避免频繁扩充列表/创建新列表
      • 2 - 在列表头部操作多的场景使用 deque 模块
      • 3 - 使用集合/字典来判断成员是否存在
  • 高层看容器
    • 写扩展性更好的代码
      • 面向容器接口编程
  • 常用技巧
    • 1 - 使用元组改善分支代码
    • 2 - 在更多地方使用动态解包
    • 3 - 使用 next() 函数
    • 4 - 使用有序字典来去重
  • 常见误区
    • 1 - 当心那些已经枯竭的迭代器
    • 2 - 别在循环体内修改被迭代对象
  • 总结
  • 系列其他文章
  • 注解

5. 让函数返回结果的技巧

  • 编程建议
    • 1 - 单个函数不要返回多种类型
    • 2 - 使用 partial 构造新函数
    • 3 - 抛出异常,而不是返回结果与错误
    • 4 - 谨慎使用 None 返回值
      • 1 - 作为操作类函数的默认返回值
      • 2 - 作为某些“意料之中”的可能没有的值
      • 3 - 作为调用失败时代表“错误结果”的值
    • 5 - 合理使用“空对象模式”
    • 6 - 使用生成器函数代替返回列表
    • 7 - 限制递归的使用
  • 总结
  • 附录

6. 异常处理的三个好习惯

  • 前言
  • 三个好习惯
    • 1 - 只做最精确的异常捕获
    • 2 - 别让异常破坏抽象一致性
    • 3 - 异常处理不应该喧宾夺主
  • 总结
  • 附录

7. 编写地道循环的两个建议

  • 前言
  • 什么是“地道”的循环?
    • enumerate() 所代表的编程思路
  • 建议1:使用函数修饰被迭代对象来优化循环
    • 1 - 使用 product 扁平化多层嵌套循环
    • 2 - 使用 islice 实现循环内隔行处理
    • 3 - 使用 takewhile 替代 break 语句
    • 4 - 使用生成器编写自己的修饰函数
  • 建议2:按职责拆解循环体内复杂代码块
    • 复杂循环体如何应对新需求
    • 使用生成器函数解耦循环体
  • 总结
  • 附录

8. 使用装饰器的技巧

  • 前言
  • 最佳实践
    • 1 - 尝试用类来实现装饰器
    • 2 - 使用 wrapt 模块编写更扁平的装饰器
  • 常见错误
    • 1 - “装饰器”并不是“装饰器模式”
    • 2 - 记得用 functools.wraps() 装饰内层函数
    • 3 - 修改外层变量时记得使用 nonlocal
  • 总结
  • 附录

9. 一个关于模块的小故事

  • 前言
  • 一个关于模块的小故事
    • 需求变更
    • 解决环形依赖问题
    • 小 C 的疑问
  • 总结
  • 附录

10. 做一个精通规则的玩家

  • 前言
    • Python 里的规则
  • 案例:从两份旅游数据中获取人员名单
    • 第一次蛮力尝试
    • 尝试使用集合优化函数
    • 对问题的重新思考
    • 利用集合的游戏规则
    • 使用 dataclass 简化代码
    • 案例总结
  • 其他规则如何影响我们
    • 使用 __format__ 做对象字符串格式化
    • 使用 __getitem__ 定义对象切片操作
  • 总结
  • 附录

11. 高效操作文件的三个建议

  • 前言
  • 建议一:使用 pathlib 模块
    • 使用 pathlib 模块改写代码
    • 其他用法
  • 建议二:掌握如何流式读取大文件
    • 标准做法的缺点
    • 使用 read 方法分块读取
    • 利用生成器解耦代码
  • 建议三:设计接受文件对象的函数
    • 如何编写兼容二者的函数
  • 总结
  • 附录
  • 注解

12. 写好面向对象代码的原则(上)

  • 前言
    • Python 对 OOP 的支持
    • SOLID 设计原则
  • SOLID 原则与 Python
  • S:单一职责原则
    • 违反“单一职责原则”的坏处
    • 拆分大类为多个小类
    • 另一种方案:使用函数
  • O:开放-关闭原则
    • 如何违反“开放-关闭原则”
    • 使用类继承来改造代码
    • 使用组合与依赖注入来改造代码
    • 使用数据驱动思想来改造代码
  • 总结
  • 附录

13. 写好面向对象代码的原则(中)

  • 前言
  • 里氏替换原则与继承
  • L:里氏替换原则
  • 一个违反 L 原则的样例
    • 不当继承关系如何违反 L 原则
    • 一个简单但错误的解决办法
    • 正确的修改办法
  • 另一种违反方式:子类修改方法返回值法返回值)
    • 分析类方法返回结果
    • 如何修改代码
    • 方法参数与 L 原则
  • 总结
  • 附录

14.

编辑推荐精选

商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI助手AI工具AI写作工具AI辅助写作蛙蛙写作学术助手办公助手营销助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
下拉加载更多