我一直觉得编程某种意义上是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目。
在雕琢代码的过程中,有大工程:比如应该用什么架构、哪种设计模式。也有更多的小细节,比如何时使用异常(Exceptions)、或怎么给变量起名。那些真正优秀的代码,正是由无数优秀的细节造就的。
『Python 工匠』这个系列文章,是我的一次小小尝试。它专注于分享 Python 编程中的一些偏 『小』 的东西。希望能够帮到每一位编程路上的匠人。
关注我的微信公众号,在第一时间阅读最新文章:
所有文章禁止转载,如需转载请通过微信公众号联系我。
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 - 少写数字字面量
- 实用技巧
- 1 - 布尔值其实也是“数字”
- 2 - 改善超长字符串的可读性
- 当多级缩进里出现多行字符串时
- 3 - 别忘了那些 “r” 开头的内建字符串函数
- 4 - 使用“无穷大” float("inf")
- 常见误区
- 1 - “value += 1” 并非线程安全
- 2 - 字符串拼接并不慢
- 结语
4. 容器的门道
- 底层看容器
- 写更快的代码
- 1 - 避免频繁扩充列表/创建新列表
- 2 - 在列表头部操作多的场景使用 deque 模块
- 3 - 使用集合/字典来判断成员是否存在
- 写更快的代码
- 高层看容器
- 写扩展性更好的代码
- 面向容器接口编程
- 写扩展性更好的代码
- 常用技巧
- 1 - 使用元组改善分支代码
- 2 - 在更多地方使用动态解包
- 3 - 最好不用“获取许可”,也无需“要求原谅”
- 4 - 使用 next() 函数
- 5 - 使用有序字典来去重
- 常见误区
- 1 - 当心那些已经枯竭的迭代器
- 2 - 别在循环体内修改被迭代对象
- 总结
- 系列其他文章
- 注解
5. 让函数返回结果的技巧
- 编程建议
- 1 - 单个函数不要返回多种类型
- 2 - 使用 partial 构造新函数
- 3 - 抛出异常,而不是返回结果与错误
- 4 - 谨慎使用 None 返回值
- 1 - 作为操作类函数的默认返回值
- 2 - 作为某些“意料之中”的可能没有的值
- 3 - 作为调用失败时代表“错误结果”的值
- 5 - 合理使用“空对象模式”
- 6 - 使用生成器函数代替返回列表
- 7 - 限制递归的使用
- 总结
- 附录
- 前言
- 三个好习惯
- 1 - 只做最精确的异常捕获
- 2 - 别让异常破坏抽象一致性
- 3 - 异常处理不应该喧宾夺主
- 总结
- 附录