PEP 8,为什么在关键字参数或默认参数值周围不加空格?
为什么PEP 8建议在关键字参数或默认参数值的=
周围不要加空格呢?
这和在Python代码中其他地方使用=
时推荐加空格的做法是不是有点矛盾?
比如说:
func(1, 2, very_long_variable_name=another_very_long_variable_name)
这样比:
func(1, 2, very_long_variable_name = another_very_long_variable_name)
要好在哪里呢?
如果有关于这个问题的讨论或解释的链接,尤其是来自Python的BDFL的,我会很感激。
请注意,这个问题主要是关于关键字参数,而不是默认值,我只是用了PEP 8中的说法。
我不是在征求意见。我是在问这个决定背后的原因。更像是在问为什么我在C程序中会把{
放在if
语句的同一行,而不是是否应该这样做。
7 个回答
我不会把很长的变量名用作默认参数。你可以考虑这样写:
func(1, 2, axis='x', angle=90, size=450, name='foo bar')
而不是这样:
func(1, 2, axis = 'x', angle = 90, size = 450, name = 'foo bar')
另外,把变量当作默认值用也没什么太大意义。也许可以用一些常量变量(虽然它们其实并不是真正的常量),在这种情况下,我会用全大写的名字,尽量简短且描述性强。所以不要再用另一个很长的名字了……
这件事有好有坏。
我非常不喜欢PEP8规范的代码阅读起来的感觉。我不认同那种说法,认为very_long_variable_name=another_very_long_variable_name
比very_long_variable_name = another_very_long_variable_name
更容易让人看懂。人们并不是这样阅读的,这样的写法增加了额外的思考负担,尤其是在没有语法高亮的情况下。
不过,遵循这些空格规则确实有一个很大的好处。如果大家都按照这些规则来写代码,那么用工具搜索参数时会变得更加有效。
我想这主要是因为关键字参数和变量赋值本质上是不同的东西。
比如,代码中经常会看到这样的写法:
kw1 = some_value
kw2 = some_value
kw3 = some_value
some_func(
1,
2,
kw1=kw1,
kw2=kw2,
kw3=kw3)
正如你所看到的,把一个变量赋值给一个名字完全相同的关键字参数是很合理的,这样做可以提高代码的可读性,因为它们没有空格。这样更容易让人明白我们是在使用关键字参数,而不是把变量赋值给它自己。
另外,参数通常会在同一行,而赋值一般每个都会单独占一行,所以在这里节省空间可能是个重要的考虑。