Python PEP8 规范

3 投票
3 回答
8226 浏览
提问于 2025-04-18 13:44

我刚开始学Python,读了一些PEP标准,这些是编写Python代码时需要遵循的规范。你可以在这里查看:http://legacy.python.org/dev/peps/pep-0008

现在我有个疑问。标准里提到,在使用关键字参数或者函数的默认参数值时,不应该在等号周围加空格。

举个例子:

可以这样写

def myfunc(key1=val1, key2=val2, key3=val3)

不可以这样写

def myfunc(key1 = val1, key2 = val2, key3 = val3)

这没问题,但如果我把这些参数分成多行,比如当参数很多或者名字很长的时候,应该怎么写呢?

def myfunc(key1=val1, key2=val2, key3=val3)

在这种情况下,我觉得我们可以在等号周围加空格。这样做是为了提高可读性,但我只是好奇,这方面有没有标准?我想了解一下最佳实践。

字典也是一样的情况。

new_dict= Dict(
       key1=val1, 
       key2=val2, 
       key3=val3
)

另外,在字典的最后一个参数后面应该加逗号吗?就像上面提到的例子,我在最后一个值(key3=val3)后面没有加逗号。

3 个回答

2

不,声明关键字参数时不要在等号周围加空格。可以这样想:如果你只是快速浏览代码,你希望自己的眼睛能很快区分普通程序流程中的赋值操作符(比如 spam = True)和关键字参数,尤其是当它单独一行时(比如 spam=True)。

至于结尾的逗号,我一直觉得加上结尾的逗号可以告诉其他团队成员或读者,我觉得这个列表、字典、集合等可能将来会增加更多内容。如果我比较确定这个结构已经是最终状态了,我就会把它去掉。

6

没问题,但如果我把这些分成多行呢?比如说当我们有很多参数或者名字很长的时候。

def myfunc(key1=val1, 
       key2=val2, 
       key3=val3)

在你给的代码中,你在=周围没有留空格,所以在运算符的空格使用上是符合pep8规范的(不过你的缩进不符合pep8)。

一般来说,你可以随意写你的代码。如果不遵循pep8,其他人可能会觉得你的代码不太好读。如果你们公司有自己的标准,那就应该优先遵循公司的标准。如果没有特别的标准让你去违反pep8,你的同事可能会因为你不遵循pep8而讨厌你。

如果你根本没有任何标准,未来的你也会讨厌现在的你。

2

PEP8 明确指出

在表示关键字参数或默认参数值时,不要在等号周围加空格。

在这两种情况下,你都不需要在等号周围加空格。

如果你不确定自己的代码是否符合PEP8标准,可以使用flake8这个静态代码分析工具。它会在代码风格不符合规范时给出警告。

举个例子:

假设你在等号周围多加了空格:

def myfunc(key1 = 'val1',
           key2 = 'val2',
           key3 = 'val3'):
    return key1, key2, key3

flake8会对每个多余的空格发出警告:

$ flake8 test.py
test.py:3:16: E251 unexpected spaces around keyword / parameter equals
test.py:3:18: E251 unexpected spaces around keyword / parameter equals
test.py:4:16: E251 unexpected spaces around keyword / parameter equals
test.py:4:18: E251 unexpected spaces around keyword / parameter equals
test.py:5:16: E251 unexpected spaces around keyword / parameter equals
test.py:5:18: E251 unexpected spaces around keyword / parameter equals

撰写回答