PEP 8 – Python 代码风格指南中文版(三)
创始人
2024-11-15 03:04:09
0

代码布局

模块级别的双下划线名称

模块级别的“双下划线名称”(即带有两个前导和两个尾随下划线的名称),如__all__、__author__、__version__等,应该放在模块文档字符串之后,但在除__future__导入之外的任何导入语句之前。Python规定,未来导入(future-imports)必须出现在模块中的任何代码之前,但文档字符串除外:

(在Python中,遵循PEP 8风格指南时,模块的布局很重要。这包括在模块中定义各种元素(如变量、函数、类等)的顺序。对于模块级别的特殊变量,如__all__(用于指定当使用from module import *时应该导入哪些名称)、__author__(用于指定模块的作者)、__version__(用于指定模块的版本号)等,PEP 8建议将它们放置在模块文档字符串之后。

此外,PEP 8还指出,这些双下划线名称(通常称为“dunders”)应该出现在除__future__导入之外的任何导入语句之前。__future__导入是Python中的一种特殊导入,它允许你使用未来版本的Python中引入的新特性,即使你当前使用的是旧版本的Python。由于这些导入可能会改变Python的语法或行为,因此它们必须放在模块中的任何代码之前(除了文档字符串)。

因此,当你编写Python模块时,你应该首先放置文档字符串,然后是__future__导入(如果有的话),接着是模块级别的双下划线名称(如__all__、__author__、__version__等),最后是其他的导入语句和模块代码。这样的布局有助于保持代码的组织性和可读性。)

"""This is the example module.  This module does stuff. """  from __future__ import barry_as_FLUFL  __all__ = ['a', 'b', 'c'] __version__ = '0.1' __author__ = 'Cardinal Biggles'  import os import sys

字符串引号

在Python中,单引号字符串和双引号字符串是等价的。本PEP(Python增强提案)并未对此做出推荐。你应该选择一种规则并坚持使用。然而,当字符串中包含单引号或双引号字符时,应使用另一种引号以避免在字符串中使用反斜杠。这样做可以提高代码的可读性。

对于三引号字符串,请始终使用双引号字符,以保持与PEP 257中文档字符串约定的一致性。

表达式和语句中的空白符

令人恼火的细节

避免在以下情况下出现多余空格:

  • 括号、方括号或大括号内部直接紧挨:
# 正确的: spam(ham[1], {eggs: 2})  # 错误的: spam( ham[ 1 ], { eggs: 2 } ) 

 

  • 在尾随逗号和随后的闭合括号之间:
# 正确的: foo = (0,)  # 错误的: bar = (0, )

 

  • 在逗号、分号或冒号之前直接紧挨:
# 正确的: if x == 4: print(x, y); x, y = y, x  # 错误的: 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[1: 9], ham[1 :9], ham[1:9 :3] ham[lower : : step] ham[ : upper]

 

  • 在函数调用参数列表的开始括号之前紧挨:
# 正确的: spam(1)   # 错误的: spam (1)

  • 在索引或切片开始的开放括号之前紧挨:
# 正确的: dct['key'] = lst[index]   # 错误的: dct ['key'] = lst [index]

  • 在赋值(或其他)运算符周围超过一个空格以对齐另一个:
# 正确的: x = 1 y = 2 long_variable = 3   # 错误的: x             = 1 y             = 2 long_variable = 3

其他建议

  1. 避免在任何地方留下尾随空格。因为尾随空格通常是不可见的,所以可能会造成混淆:例如,一个反斜杠后面跟一个空格和换行符并不被视为行继续符。一些编辑器不会保留尾随空格,而许多项目(如CPython本身)都有预提交钩子来拒绝包含尾随空格的提交。
  2. 始终在这些二元运算符的两侧各用一个空格包围:赋值运算符(=)、增强赋值运算符(+=、-=等)、比较运算符(==、<、>、!=、<>、<=、>=、in、not in、is、is not)、布尔运算符(and、or、not)。
  3. 如果使用了不同优先级的运算符,请考虑在优先级最低的运算符周围添加空格。使用你自己的判断;但是,永远不要使用超过一个空格,并且始终在二元运算符的两侧保持相同数量的空格。
# 正确的: 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)

  1. 函数注解应该使用冒号的正常规则,并且在存在箭头的情况下,箭头(->)的两侧应该始终有空格。(有关函数注解的更多信息,请参阅下面的“函数注解”部分。)
# 正确的: def munge(input: AnyStr): ... def munge() -> PosInt: ...   # 错误的: def munge(input:AnyStr): ... def munge()->PosInt: ...

当等号(=)用于指示关键字参数,或者用于指示未加注解的函数参数的默认值时,不要在等号周围使用空格。

# 正确的: 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(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 += xwhile 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()

相关内容

热门资讯

透视脚本!德州局HHpoker... 透视脚本!德州局HHpoker透视脚本(底牌)详细透视辅助器(有挂揭秘);1、每一步都需要思考,不同...
1分钟发现!微扑克微乐辅助,(... 1分钟发现!微扑克微乐辅助,(wpK)好像是有挂(详细透视辅助插件插件)1、游戏颠覆性的策略玩法,独...
透视辅助器!wepoker破解... 透视辅助器!wepoker破解版内购,(WePoKer)一直是真的有挂(详细透视底牌辅助工具)1.w...
9分钟脚本!aapoker辅助... 9分钟脚本!aapoker辅助软件合法吗,aapoker脚本怎么用,新2025版(有挂工具);暗藏猫...
透视脚本!hhpoker辅助软... 透视脚本!hhpoker辅助软件(底牌)详细透视辅助挂(有挂黑科技)一、hhpoker辅助软件AI软...
九分钟发现!wpk私人辅助,(... 九分钟发现!wpk私人辅助,(WPk)其实是有挂(详细透视辅助安装揭秘)所有人都在同一条线上,像星星...
信息共享!wepoker辅助器... 您好,wepoker辅助器软件下载这款游戏可以开挂的,确实是有挂的,需要了解加微【757446909...
7分钟脚本!aapoker公共... 7分钟脚本!aapoker公共底牌,aapoker破解侠是真的吗,透视教程(有挂透视);1、完成aa...
透视脚本!hhpoker是真的... 透视脚本!hhpoker是真的还是假的(底牌)详细透视辅助工具(有挂插件);1、hhpoker是真的...
9分钟科普!wpk软件是真的,... 9分钟科普!wpk软件是真的,(WPk)一直存在有挂(详细透视辅助工具规律)1、wpk软件是真的系统...