标准头部#!/usr/bin/python 编码所有的 Python 脚本文件都应在文件头标上 #-*- coding:utf8 -*- 。设置编辑器,默认保存为 utf8 格式。 main函数应用程序要定义main函数而不要直接写脚本 def main(): dosomething() if __name__ == "__main__": main() 如果是全局变量,则需要显式加上"global"。 注释Python 的注释分为两种的概念,一种是由 # 开头的"真正的"注释,另一种是 docstrings。前者表明为何选择当前实现以及这种实现的原理和难点,后者表明如何使用这个包、模块、类、函数(方法),甚至包括使用示例和单元测试。 缩进Python 代码缩进为4个空格,在文件结尾声明 # Modeline {{{ # vim:set ts=4: # vim600:fdm=marker fdl=0 fdc=0 # }}} 空格空格在Python 代码中是有意义的,因为Python的语法依赖于缩进,在行首的空格称为前导空格。在这一节不讨论前导空格相关的内容,只讨论非前导空格。非前导空格在 Python 代码中没有意义,但适当地加入非前导空格可以增进代码的可读性。 空行1)在类、函数的定义间加空行; 断行行的最大长度不得超过 80 个字符的标准。折叠长行的方法有以下几种方法: this.is.a.very.long.variable_name = this.is.another.long.variable_name 应改为: variable_name1 = this.is.a.very.long.variable_name variable_name2 = this.is.another.variable_name variable_name1 = variable_name2 2)在括号(包括圆括号、方括号和花括号)内换行,如: class Edit(CBase): def __init__(self, parent, width, font = FONT, color = BLACK, pos = POS, style = 0): 或: very_very_very_long_variable_name = Edit(parent, \ width, \ font, \ color, \ pos) 2)在长行加入续行符强行断行,断行的位置应在操作符前,且换行后多一个缩进,以使维护人员看代码的时候看到代码行首即可判定这里存在换行,如: if color == WHITE or color == BLACK \
or color == BLUE:
do_something(color);
命名常量常量名所有字母大写,由下划线连接各个单词,如: WHITE = 0XFFFFFF THIS_IS_A_CONSTANT = 1 变量变量名全部小写,由下划线连接各个单词,如: color = WHITE this_is_a_variable = 1 不论是类成员变量还是全局变量,均不使用m或g前缀。私有类成员使用单一下划线前缀标识。 函数函数名的命名规则与变量名相同。 类类名单词首字母大写,不使用下划线连接单词,也不加入 C、T 等前缀。如: class ThisIsAClass(object): pass 模块模块名全部小写,对于包内使用的模块,可以加一个下划线前缀,如: module.py _internal_module.py 包包的命名规范与模块相同。 缩写命名应当尽量使用全拼写的单词,缩写的情况有如下两种: 特定命名方式主要是指 __xxx__ 形式的系统保留字命名法。项目中也可以使用这种命名,它的意义在于这种形式的变量是只读的,这种形式的类成员函数尽量不要重载。如 class Base(object): def __init__(self, id, parent = None): self.__id__ = id self.__parent__ = parent def __message__(self, msgid): # ...略 其中 _id、parent_ 和 _message_ 都采用了系统保留字命名法。 语句importimport 语句有以下几个原则需要遵守: 赋值对于赋值语言,主要是不要做无谓的对齐,如: a = 1 variable = 2 fn = callback_function 应该写成: a = 1 variable = 2 fn = callback_function 分支和循环不要写成一行,如: if !flg: pass for i in xrange(10): print i 应该写成: if !flg: pass for i in xrange(10): print i 其他建议避免在内存中处理大对象,由于python申请的内存不一定会返还给操作系统(有时会返还给python内存池) |