风格规范
- 命名:
- 文件名: cap_words
- 类名: CapWords、_CapWords
- 函数名、变量名: cap_words、_cap_words、__cap_words
- 常量名: CAP_WORDS、_CAP_WORDS
- 注释:
- 文档注释:符号用”””,第一行介绍并且句号等结尾,第二行空,第三行解释
- 函数注释:如文档注释,输入参数(Args:),输出参数(Returns:),异常(Raises:)
- 类注释: 如文档注释,共有属性(Attributes:)
- 块注释: #开头,空两格,代码前行编写
- 行注释: #开头,空两格,代码后面编写
- TODO注释:#TODO(name): remote update software
- 细节部分
- 行长度: 每条命令一行(行长度<80),超过的部分 行连接用()
- 空行: 顶级定义空两行,方法定义空一行
- 空格: “,”后面加空格,操作符两边加空格,参数的=后不加空格
- 类继承: 默认继承object
- 字符串: 用%s,’{}’.format代替+;循环中 ‘’.join(list) 代替+=,单双引号统一
- 文件socket等:显示关闭,用with open() as ;contextlib.closing() as来代替
- 导入格式:导入占一行;导入模块在文档注释后;顺序:标准库、第三方库、应用程序
- Main函数:脚本中加入main,避免导入该模块执行一些代码
语言规范
1. 使用lambda 适合单行函数
2. 用@property返回属性,用@x.setter限制类属性范围
3. 用隐式的false(0、None、[]、{});None用is判断;list 用 if not list;”0” == true
4. 用yield 代替 return,用for循环来取值
5. 用operator优化速度
6. 单行函数 if ... else ...
7. 默认对象用None,不用可变对象[]
8. 推荐用嵌套函数,注意词法作用域
9. 线程间通讯用Queue作为数据类型,用threading.Condition代替锁