Python代码这样写才规范优雅! (二)

浏览: 2590

前文传送门:Python代码这样写才规范优雅! (一)

参考:

https://www.python.org/dev/peps/pep-0008/

Python PEP8编码规范的内容如下:

1. Introduction 介绍
2. A Foolish Consistency is the Hobgoblin of Little Minds 尽信书,则不如无书
3. Code lay-out 代码布局
3.1 Indentation 缩进
3.2 Tabs or Spaces? 制表符还是空格?
3.3 Maximum Line Length 行的最大长度
3.4 Should a line break before or after a binary operator? 在二元运算符之前应该换行吗?
3.5 Blank Lines 空行
3.6 Source File Encoding 源文件编码
3.7 Imports 导入
3.8 Module level dunder names 模块级的“呆”名
4. String Quotes 字符串引号
5. Whitespace in Expressions and Statements 表达式和语句中的空格
5.1 Pet Peeves 不能忍受的事情
5.2 Other Recommendations 其他建议
6. Comments 注释
6.1 Block Comments 块注释
6.2 Inline Comments 行内注释
6.3 Documentation Strings 文档字符串
7. Naming Conventions 命名规范
7.1 Overriding Principle 最重要的原则
7.2 Descriptive: Naming Styles 描述:命名风格
7.3 Prescriptive: Naming Conventions 约定俗成:命名约定
7.4 Public and internal interfaces 公共和内部的接口
8. Programming Recommendations 编程建议
8.1 Function Annotations 功能注释
9. 参考

我们接着上一篇的内容继续看:

4. String Quotes 字符串引号

在Python中,单引号和双引号字符串是相同的。PEP不会为这个给出建议。选择一条规则并坚持使用下去。当一个字符串中包含单引号或者双引号字符的时候,使用和最外层不同的符号来避免使用反斜杠,从而提高可读性。 对于三引号字符串,总是使用双引号字符来与PEP257中的文档字符串约定保持一致。

5. Whitespace in Expressions and Statements 表达式和语句中的空格

5.1 Pet Peeves 不能忍受的事情

在下列情况下,避免使用无关的空格:紧跟在小括号,中括号或者大括号后。

Yes: 
spam(ham[1], {eggs: 2})

No:  
spam( ham[ 1 ], { eggs: 2 } )

紧贴在逗号、分号或者冒号之前。

Yes: 
if x == 4print 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]
不推荐:
ham[lower + offset:upper + offset]
ham[19], ham[1 :9], ham[1:9 :3]
ham[lower : : upper]
ham[ : upper]

紧贴在函数参数的左括号之前。

Yes: 
spam(1)

No: 
spam (1)

紧贴索引或者切片的左括号之前。

Yes: 
dct['key'] = lst[index]

No: 
dct ['key'] = lst [index]

为了和另一个赋值语句对齐,在赋值运算符附件加多个空格。 

推荐:
x = 1
y = 2
long_variable = 3
不推荐:
x             = 1
y             = 2
long_variable = 3

5.2 Other Recommendations 其他建议

避免在尾部添加空格。因为尾部的空格通常都看不见,会产生混乱:比如,一个反斜杠后面跟一个空格的换行符,不算续行标记。有些编辑器不会保留尾空格,并且很多项目(像CPython)在pre-commit的挂钩调用中会过滤掉尾空格。总是在二元运算符两边加一个空格:赋值(=),增量赋值(+=,-=),比较(==,<,>,!=,<>,<=,>=,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)
不推荐:
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)

功能型注释应该使用冒号的一般性规则,并且在使用->的时候要在两边加空格。(参考下面的功能注释得到能够多信息)

推荐:

def munge(input: AnyStr): ...
def munge() -> AnyStr: ...
不推荐:

def munge(input:AnyStr): ...
def munge()->PosInt: ...

当给有类型备注的参数赋值的时候,在=两边添加空格(仅针对那种有类型备注和默认值的参数)。 

推荐:

def munge(sep: AnyStr = None): ...
def munge(input: AnyStr, sep: AnyStr = None, limit=1000): ...
不推荐:

def munge(input: AnyStr=None): ...
def munge(input: AnyStr, limit = 1000): ...

复合语句(同一行中的多个语句)通常是不允许的。 

推荐:

if foo == 'blah':
    do_blah_thing()
do_one()
do_two()
do_three()

最好别这样:

if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()

虽然有时候将小的代码块和 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()

扫码下图关注我们不会让你失望!

image.png

推荐 0
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册