从C#转到了python,重新梳理一下代码规范。
一、四行缩进
1、注意子代码块;
2、注意括号中的换行;
二、空白格
1、注意不要空格的情况
- 避免在行尾添加空格
- 如果使用具有不同优先级的运算符,请考虑在具有最低优先级的运算符周围添加空格。但是,永远不要使用多个空格,并且在二元运算符的两边始终具有相同数量的空白。
- 二元运算符左右都有一个空格。
assignment (=),
augmented assignment (+=, -= etc.),
comparisons (==, <, >, !=, <>, <=, >=, in, not in, is, is not),
Booleans (and, or, not)
- 紧靠括号或括号内。
Yes: spam(ham[1], {eggs: 2})
No: spam( ham[ 1 ], { eggs: 2 } )
- 在尾随逗号和后面的右括号之间。
Yes: foo = (0,)
No: bar = (0, )
- 关于冒号的缩进规则
Yes:
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]
No:
ham[lower + offset:upper + offset]
ham[1: 9], ham[1 :9], ham[1:9 :3]
ham[lower : : upper]
ham[ : upper]
- 函数注释应该使用冒号的常规规则,并且如果存在,则始终在- >箭头周围留出空格。
Yes:
def munge(input: AnyStr): ...
def munge() -> AnyStr: ...
No:
def munge(input:AnyStr): ...
def munge()->PosInt: ...
- 当用于指示关键字参数时,或者用于指示未注释函数参数的默认值时,请勿在=符号周围使用空格。
Yes:
def complex(real, imag=0.0):
return magic(r=real, i=imag)
No:
def complex(real, imag = 0.0):
return magic(r = real, i = imag)
- 但是,在将参数注释与默认值组合时,请在=符号周围使用空格。
Yes:
def munge(sep: AnyStr = None): ...
def munge(input: AnyStr, sep: AnyStr = None, limit=1000): ...
No:
def munge(input: AnyStr=None): ...
def munge(input: AnyStr, limit = 1000): ...
三、注释
保持注释始终处于最新状态。
1、块注释
块注释通常适用于跟随它们的一些(或所有)代码,并缩进到与该代码相同的级别。块注释的每一行都以#和单个空格开头(除非它是注释中的缩进文本)。
块注释中的段落由包含单个#的行分隔。
2、行注释
谨慎使用行评论。
行注释是与语句在同一行上的注释。行注释应与语句中至少两个空格分隔。它们应该以#和单个空格开头。
3、文档字符串
四、命名约定
1、包和模块名称
模块应具有简短的全小写名称。如果提高可读性,则可以在模块名称中使用下划线。Python包也应该有简短的全小写名称,但不鼓励使用下划线。
当用C或C ++编写的扩展模块具有提供更高级别(例如更多面向对象)的接口的Python模块时,C / C ++模块具有前导下划线(例如_socket)。
2、类名称
类名通常应使用CapWords约定。
3、类型变量名称
同上。
4、异常名称
同上。
5、全局变量名称
同上。
6、函数与变量名称
函数名称应为小写,并根据需要用下划线分隔,以提高可读性。变量名称遵循与函数名称相同的约定。
2只有在已经是主流风格(例如threading.py)的上下文中才允许使用mixedCase,以保持向后兼容性。
7、函数和方法参数
始终使用self作为实例方法的第一个参数。
始终使用cls作为类方法的第一个参数。
如果函数参数的名称与保留关键字冲突,通常最好附加单个尾随下划线而不是使用缩写或拼写损坏。因此class_比clss好。(或许最好是通过使用同义词来避免这种冲突。)
8、常量
常量通常在模块级别定义,并以全部大写字母书写,下划线分隔单词。示例包括 MAX_OVERFLOW和TOTAL。