1. **缩进**:
- 使用空格而不是制表符进行缩进,一个制表符展开为 4 个空格。
2. **空格**:
- 在列表、字典、元组、集合和参数列表的逗号后添加空格。
- 在字典的冒号后添加空格。
- 在注释符号 `#` 后添加空格,但是 `#!/usr/bin/python` 后面不能有空格。
- 操作符两侧添加空格,例如 +、-、*、/、|、&、=。
- 括号内不需要空格。
3. **空行**:
- 函数和类之间留两个空行。
- 类的方法之间留一个空行。
- 函数内逻辑无关段落之间留一个空行。
- 不要将多个语句写在同一行,使用分号隔开。
4. **换行**:
- 控制每行代码在 80 个字符以内。
- 使用 `\` 或 `()` 控制换行。
5. **命名**:
- 使用有意义的英文单词或短语进行命名,不要使用汉语拼音。
- 不要在包/模块名中使用连字符 `-`。
- 不同类型的命名规范有所不同,包括模块、类、异常、函数/方法、全局/类常量、全局/类变量、实例变量和方法名。
6. **import**:
- 所有 import 应尽量放在文件顶部,在文档字符串下面,其他变量定义的上面。
- 不要使用 `from foo import *`。
- import 需要分组,分为标准库、第三方库和本项目的包/模块,并且每组之间用一个空行隔开。
7. **注释**:
- 文档字符串(docstring)是模块、类、方法、函数级别的注释。
- 函数/方法的文档字符串应描述其功能、输入参数和返回值,如果有必要还需描述复杂的算法和实现。
- 避免写无用或错误的注释,优先使用英文撰写,必要时使用中文。
8. **异常**:
- 避免轻易使用 try/except,需要指定捕获的异常类型。
- 可以有多个 except 语句捕获多种异常,并在 finally 子句中处理收尾操作。
- 尽量不要在 try/except 中写过多的内容,只在可能抛出异常的地方使用。
9. **其他**:
- 使用字符串的 join 方法拼接字符串,使用字符串方法而不是 string 模块的方法。
- 使用 in 操作符代替字典的 has_key() 方法。
- 使用列表推导、字典推导和生成器。
- 使用 with 语句处理上下文。
- 使用装饰器、logging 记录日志,了解 Python 的魔法方法和鸭子类型特性。
- 阅读优秀的开源代码,尽量避免重复造轮子,利用现有的解决方案。