编程初入门工作生活

Python开发编码规范

2019-07-02  本文已影响0人  叶子陪你玩

1.代码的缩进

# 与左括号对齐
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# 用更多的缩进来与其他行区分
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

# 挂行缩进应该再换一行
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

#在多行结构中的大括号/中括号/小括号的右括号可以与内容对齐单独起一行作为最后一行的第一个字符
my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )
较长的代码行选择Python在小括号,中括号以及大括号中的隐式续行方式。
通过小括号内表达式的换行方式将长串折成多行。这种方式应该优先使用,而不是使用反斜杠续行。 
反斜杠有时依然很有用。比如,比较长的,多个with状态语句,不能使用隐式续行,所以反斜杠是可以接受的:

with open('/path/to/some/file/you/want/to/read') as file_1, \
     open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

不论什么情况使用 UTF-8 吧!

2.导入

推荐: import os
     import sys
不推荐:  import sys, os

1.标准库导入
2.相关第三方库导入
3.本地应用/库特定导入 
你应该在每一组导入之间加入空行。

3.空格

紧跟在小括号,中括号或者大括号后。
Yes: spam(ham[1], {eggs: 2})
No:  spam( ham[ 1 ], { eggs: 2 } )

紧贴在逗号、分号或者冒号之前。
Yes: if x == 4: print x, y; x, y = y, x
No:  if x == 4 : print x , y ; x , y = y , x

然而,冒号在切片中就像二元运算符,在两边应该有相同数量的空格(把它当做优先级最低的操作符)。在扩展的切片操作中,所有的冒号必须有相同的间距。例外情况:当一个切片参数被省略时,空格就被省略了。 
推荐:
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]

紧贴在函数参数的左括号之前。
Yes: spam(1)
No:  spam (1)

紧贴索引或者切片的左括号之前。
Yes: dct['key'] = lst[index]
No:  dct ['key'] = lst [index]

总是在二元运算符两边加一个空格:赋值(=),增量赋值(+=,-=),
比较(==,<,>,!=,<>,<=,>=,in,not,in,is,is not),布尔(and, or, not)。
如果使用具有不同优先级的运算符,请考虑在具有最低优先级的运算符周围添加空格。
有时需要通过自己来判断;但是,不要使用一个以上的空格,并且在二元运算符的两边使用相同数量的空格。 
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

在制定关键字参数或者默认参数值的时候,不要在=附近加上空格。 
推荐:
def complex(real, imag=0.0):
    return magic(r=real, i=imag)

不推荐:

def complex(real, imag = 0.0):
    return magic(r = real, i = imag)

4.注释

注释块 (Block Comments) 
注释块通常应用于跟随着一些(或者全部)代码并和这些代码有着相同的缩进层次. 
注释块中每行以'#'和一个空格开始(除非他是注释内的缩进文本).
注释块内的段落以仅含单个'#'的行分割. 
注释块上下方最好有一空行包围(或上方两行下方一行,对一个新函数定义段
的注释).

行内注释 (Inline Comments) 
一个行内注释是和语句在同一行的注释.行内注释应该谨慎适用.
行内注释应该至少用两个空格和语句分开. 它们应该以'#'和单个空格开始.

5.文档化

编写好的文档说明(也叫“docstrings”)的约定在PEP 257中永恒不变。

要为所有的公共模块,函数,类以及方法编写文档说明。非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后。

PEP 257 描述了写出好的文档说明相关的约定。特别需要注意的是,多行文档说明使用的结尾三引号应该自成一行,例如:

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.
"""

6.命名约定

永远不要用字符`l'(小写字母el(就是读音,下同)), O'(大写字母oh),或I'(大写字母eye)作为单字符的变量名.
在某些字体中,这些字符不能与数字1和0分开.当想要使用'l'时,用'L'代替它.

模块应该是不含下划线的,简短的,小写的名字.
因为模块名被映射到文件名, 有些文件系统大小写不敏感并且截短长名字

上一篇下一篇

猜你喜欢

热点阅读