本文内容全部由 Python 编码的最佳实践组成,从基本原则、惯用法、语法、库、设计模式、内部机制、开发工具和性能优化 8 个方面深入探讨了编写高质量
Python
代码的技巧与禁忌,一共总结出 91 条宝贵的建议。每条建议对应Python
程序员可能会遇到的一个问题。
建议 1:理解 Pythonic 概念
建议 2:编写 Pythonic 代码
建议 3:理解 Python 与 C 语言的不同之处
建议 4:在代码中适当添加注释
建议 5:通过适当添加空行使代码布局更为优雅、合理
建议 6:编写函数的 4 个原则
建议 7:将常量集中到一个文件
建议 8:利用 assert 语句来发现问题
建议 9:数据交换值的时候不推荐使用中间变量
建议 10:充分利用 Lazy evaluation 的特性
建议 11:理解枚举替代实现的缺陷
建议 12:不推荐使用 type 来进行类型检查
建议 13:尽量转换为浮点类型后再做除法
建议 14:警惕 eval()的安全漏洞
建议 15:使用 enumerate()获取序列迭代的索引和值
建议 16:分清 = 与 is 的适用场景
建议 17:考虑兼容性,尽可能使用 Unicode
建议 18:构建合理的包层次来管理 module
建议 19:有节制地使用 from…import 语句
建议 20:优先使用 absolute import 来导入模块
建议 21:i+=1 不等于 ++i
建议 22:使用 with 自动关闭资源
建议 23:使用 else 子句简化循环(异常处理)
建议 24:遵循异常处理的几点基本原则
建议 25:避免 finally 中可能发生的陷阱
建议 26:深人理解 None,正确判断对象是否为空
建议 27:连接字符串应优先使用 join 而不是 +
建议 28:格式化字符串时尽量使用.format 方式而不是 %
建议 29:区别对待可变对象和不可变对象
建议 30:[]、()和{}:一致的容器初始化形式
建议 31:记住函数传参既不是传值也不是传引用
建议 32:警惕默认参数潜在的问题
建议 33:慎用变长参数
建议 34:深入理解 str()和 repr()的区别
建议 35:分清 staticmethod 和 classmethod 的适用场景
建议 36:掌握字符串的基本用法
建议 37:按需选择 sort()或者 sorted()
建议 38:使用 copy 模块深拷贝对象
建议 39:使用 Counter 进行计数统计
建议 40:深入掌握 ConfigParser
建议 41:使用 argparse 处理命令行参数
建议 42:使用 pandas 处理大型 CSV 文件
建议 43:一般情况使用 ElementTree 解析 XML
建议 44:理解模块 pickle 优劣
建议 45:序列化的另一个不错的选择—JSON
建议 46:使用 traceback 获取栈信息
建议 47:使用 logging 记录日志信息
建议 48:使用 threading 模块编写多线程程序
建议 49:使用 Queue 使多线程编程更安全
建议 50:利用模块实现单例模式
公众号
逆锋起笔
专注分享Java
、Python
、个人成长、职业发展干货,关注即送小编整理的精品编程视频教程;每天下午 14:40 精彩推送,程序员值得关注的技术平台。
建议 51:用 mixin 模式让程序更加灵活
建议 52:用发布订阅模式实现松耦合
建议 53:用状态模式美化代码
建议 54:理解 build-in objects
建议 55:init() 不是构造方法
建议 56:理解名字查找机制
建议 57:为什么需要 self 参数
建议 58:理解 MRO 与多继承
建议 59:理解描述符机制
建议 60:区别 getattr()和 getattribute()方法
建议 61:使用更为安全的 property
建议 62:掌握 metaclass
建议 63:熟悉 Python 对象协议
建议 64:利用操作符重载实现中缀语法
建议 65:熟悉 Python 的迭代器协议
建议 66:熟悉 Python 的生成器
建议 67:基于生成器的协程及 greenlet
建议 68:理解 GIL 的局限性
建议 69:对象的管理与垃圾回收
建议 70:从 PyPI 安装包
建议 71:使用 pip 和 yolk 安装、管理包
建议 72:做 paster 创建包
建议 73:理解单元测试概念
建议 74:为包编写单元测试
建议 75:利用测试驱动开发提高代码的可测性
建议 76:使用 Pylint 检查代码风格
建议 77:进行高效的代码审查
建议 78:将包发布到 PyPI
建议 79:了解代码优化的基本原则
建议 80:借助性能优化工具
建议 81:利用 cProfile 定位性能瓶颈
建议 82:使用 memory_profiler 和 objgrash 剖析内存使用
建议 83:努力降低算法复杂度
建议 84:掌握循环优化的基本技巧
建议 85:使用生成器提高效率
建议 86:使用不同的数据结构优化性能
建议 87:充分利用 set 的优势
建议 88:使用 meltiprocessing 克服 GIL 的缺陷
建议 89:使用线程池提高效率
建议 90:使用 C /C++ 模块扩展提高性能
建议 91:使用 Cython 编写扩展模块
公众号
逆锋起笔
专注分享Java
、Python
、个人成长、职业发展干货,关注即送小编整理的精品编程视频教程;每天下午 14:40 精彩推送,每个程序员值得关注的技术平台。