Python PEP8 规范
我刚开始学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 个回答
不,声明关键字参数时不要在等号周围加空格。可以这样想:如果你只是快速浏览代码,你希望自己的眼睛能很快区分普通程序流程中的赋值操作符(比如 spam = True)和关键字参数,尤其是当它单独一行时(比如 spam=True)。
至于结尾的逗号,我一直觉得加上结尾的逗号可以告诉其他团队成员或读者,我觉得这个列表、字典、集合等可能将来会增加更多内容。如果我比较确定这个结构已经是最终状态了,我就会把它去掉。
没问题,但如果我把这些分成多行呢?比如说当我们有很多参数或者名字很长的时候。
def myfunc(key1=val1, key2=val2, key3=val3)
在你给的代码中,你在=
周围没有留空格,所以在运算符的空格使用上是符合pep8规范的(不过你的缩进不符合pep8)。
一般来说,你可以随意写你的代码。如果不遵循pep8,其他人可能会觉得你的代码不太好读。如果你们公司有自己的标准,那就应该优先遵循公司的标准。如果没有特别的标准让你去违反pep8,你的同事可能会因为你不遵循pep8而讨厌你。
如果你根本没有任何标准,未来的你也会讨厌现在的你。
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