Python 编程规范

编码

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__。永远不要起这样的名字。

三.行规范

1、最大行长度

限制所有行最长为79个字符。

使用反斜杠来分行是一个很好的选择。

我们应当选择在二元操作符(binary operator,如下述代码中的and、or以及%)之后进行分行,而不是之前。

2、空行

顶级函数(当前文件中的第一个函数)或者顶级类(当前文件的第一个类)之前要有两个空行

定义在类内部的函数(成员函数)之间要留有一个空行

可以使用额外的空行(但要注意节制)以区分不同的函数组,

在一堆只有一行的函数之间不要使用空行(比如一些函数的空实现)

在函数内部使用空行,来标识不同的逻辑单元

四.注释

 误导的注释不如没有注释,注释应当为完整的句子,且句号结尾的句子后面应当有2个空格。如果注释很短那么结尾的句号可以忽略。

1、块注释

块注释应当和代码缩进保持一致。每行注释开头应以#开头,然后紧跟一个空格。

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()

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Python 编程规范)