编码
Python核心发行代码里面优先使用ASCII码或Latin-1编码。3.0后UTF-8编码优先于Latin-1。
缩进 对于每一次缩进使用4个空格。使用括号、中括号、大括号进行垂直对齐,或者缩进对齐。
制表符还是空格?
永远不要将制表符与空格混合使用。Python最常用的缩进方式是只是用空格。 当调用Python命令行的 -t 选项时,它会检测并警告代码非法混合使用制表符和空格。当使用 -tt 选项时,警告变成了错误。
模块名采用小写字母并且以下划线分隔单词的形式;
包名应当简短,使用全小写,但是不要使用下划线
类名采用以大写字母开头,并且以大写字母分隔单词的形式命名(驼峰式命名);
全局或者类常量,全部使用大写字母,并且以下划线分隔单词;其余变量命名则是采用全部小写字母,并且以下划线分隔单词的形式命名。
以上的内容如果是内部的,则使用下划线开头命名。
类型 |
公共(全局) |
内部 |
模块名 |
lower_with_under |
_ lower_with_under |
包名 |
lowerwithoutunder |
|
类名 |
CapWords |
_ CapWords |
异常名 |
CapWords |
|
函数名 |
lower_with_under( ) |
_ lower_with_under( ) |
全局/类常量 |
CAPS_WITH_UNDER |
_ CAPS_WITH_UNDER |
全局/类变量 |
lower_with_under |
_ lower_with_under |
实例变量 |
lower_with_under |
_ lower_with_under(单下划线私有) __lower_with_under(双下划线避免与子类冲突) |
方法名 |
lower_with_under( ) |
_ lower_with_under()(单下划线私有) __lower_with_under()(双下划线避免与子类命名冲突) |
函数/方法参数 |
lower_with_under |
|
本地变量 |
lower_with_under |
|
注:
1、from M import * 不会导入以下划线开始的对象。
2、异常也是一个类,所以需要遵循类名规则。但如果你的异常确实是个错误的话,请使用Error前缀
3、函数与方法参数设置时,使用self作为实例方法的第一个参数。使用cls作为类方法的第一个参数。当函数的参数名与保留字冲突时,使用下划线后缀(第二次提醒)。
4、方法名与实例变量设置时,在私有方法和实例变量前用单下划线前缀。使用双下划线前缀来调用"name mangling"来避免与子类命名冲突。如果类Foo有个属性叫__a,那么它不能使用Foo.__a读取,但仍然可以Foo._Foo__a来读取
5、应避免使用的命名:不要使用小写的L、大写的O、以及大写的I作为单字符变量名。__double_leading_and_trailing_underscore__:(双下划线开始和结束)存活在用户控制命名空间的"magic"对象或属性。例如__init__, __import__ 或 __file__。永远不要起这样的名字。
限制所有行最长为79个字符。
使用反斜杠来分行是一个很好的选择。
我们应当选择在二元操作符(binary operator,如下述代码中的and、or以及%)之后进行分行,而不是之前。
顶级函数(当前文件中的第一个函数)或者顶级类(当前文件的第一个类)之前要有两个空行
定义在类内部的函数(成员函数)之间要留有一个空行
可以使用额外的空行(但要注意节制)以区分不同的函数组,
在一堆只有一行的函数之间不要使用空行(比如一些函数的空实现)
在函数内部使用空行,来标识不同的逻辑单元
误导的注释不如没有注释,注释应当为完整的句子,且句号结尾的句子后面应当有2个空格。如果注释很短那么结尾的句号可以忽略。
块注释应当和代码缩进保持一致。每行注释开头应以#开头,然后紧跟一个空格。
行注释至少和语句间隔2个空格。同样的注释应当以#开头,然后紧跟一个空格。
在python中,不对单引号和双引号作区分,PEP的代码规范也不对此有所推荐。任选其一,统一使用即可。然而,当一个字符串包含单引号或者双引号时,使用另外一种方式避免转义符(\)的使用,以提高可读性。
对于所有的公有模块、类、函数和方法都需要编写文档字符串。
""" 作为多行的文档字符串的结束,应该单独一行,并且之前有一个空行。
对于只有一行的文档字符串来说,结尾的 """ 在同一行。
1、总是在下列二元操作符的两端使用单个空格:赋值操作符(=),参数赋值(+=,-= 等),比较操作符(==,<, >, !=, <>, ⇐, >=, in, not in, is, is not),布尔操作符(and,or, not)。
2、加入使用了多个具有不同优先级的操作符,考虑在低优先级的操作符两侧使用空格。请自行判断,无论怎样,不要使用多余一个空格,并且保持二元操作符两端的空格数量一致。
#符合约定的代码
i = i + 1
submitted +=1
x = x*2 - 1
hypot2 = x*x + y*y
c =(a+b) * (a-b)
#不符合约定的代码
i=i+1
submitted +=1
x = x * 2 - 1
hypot2 = x * x + y * y
c =(a + b) * (a - b)
3、不要在指示关键字参数或参数默认值的 = 符号两端使用空格。
#符合约定的代码
defcomplex(real, imag=0.0):
return magic(r=real, i=imag)
#不符合约定的代码
defcomplex(real, imag =0.0):
return magic(r = real, i = imag)
4、不建议使用符合语句(在一个物理行中存在多条语句)。
#符合建议的代码
if foo =='blah':
do_blah_thing()
do_one()
do_two()
do_three()
#不符合建议的代码
if foo =='blah':do_blah_thing()
do_one(); do_two(); do_three()
5、虽然有时把较短小的 if/for/while 语句放在同一物理行内也是可以的,但千万不要对多子句的语句也这样做,同时也是为了避免折叠长行。
#不符合约定的代码
if foo =='blah':do_blah_thing()
for x in lst: total += x
while t <10: t = delay()
#绝对不要这样写
if foo =='blah':do_blah_thing()
else: do_non_blah_thing()
try: something()
finally: cleanup()
do_one(); do_two(); do_three(long, argument,
list, like, this)
if foo =='blah': one(); two(); three()