PEP 8是否需要在函数参数中围绕运算符的空格?

时间:2013-08-11 11:43:50

标签: python coding-style pep8

我有这段代码:

some_list = range(a, b+1)

pep8 plugin for vim检查我的编码风格后,我收到了这个警告:

missing whitespace around operator

似乎要符合PEP 8,我应该写这个吗?

some_list = range(a, b + 1)

但我已多次阅读PEP 8 - Style Guide for Python Code,但无法找到适用于上述警告的规则。

所以我想知道:当使用PEP-8样式时,在函数的参数中是否需要围绕运算符(+, - ,*,/等)的空格?

3 个答案:

答案 0 :(得分:42)

你在2013年提问时,你的Vim插件是错误的...但是在2010年,当它被创作时。 PEP 8有changed on several occasions,你问题的答案也有所改变。

最初,PEP 8包含以下短语:

  

在算术运算符周围使用空格

规则

range(a, b+1)

明确错误,应写成

range(a, b + 1)

这是pycodestyle(Python linter,以前称为pep8.py,提问者的Vim plugin在引擎盖下使用)实施多年的规则。

然而,2012年4月this was changed。这种简单易懂的语言被这个多余的建议所取代:

  

如果使用具有不同优先级的运算符,请考虑在具有最低优先级的运算符周围添加空格。用你自己的判断;但是,永远不要使用多个空格,并且在二元运算符的两边始终具有相同数量的空格。

令人困惑的是,说明这条规则的例子原本保持不变(因此与散文相矛盾)。这是eventually fixed, but not very well,这些例子仍然令人困惑,似乎意味着比散文更严格,更不主观的规则。

还有一条规则要求某些特定运算符周围的空格:

  

始终围绕这些二元运算符,两边都有一个空格:赋值(=),扩充赋值(+=-=等),比较(==<>!=<><=>=innot in,{ {1}},is),布尔(is notandor)。

但请注意,此规则明确指出它所引用的运算符以及not等算术运算符在列表中

因此,PEP以其当前形式决定是否应该使用+运算符周围的空格(或其他算术运算符,如+和{ {1}}和*)。您可以“使用您自己的判断”

顺便说一句,pycodestyle linter changed its behaviour in late 2012 to reflect the change in the PEP将有关使用运算符周围空格的规则分成两个错误代码E225(因为未能使用PEP 8仍然所需的运算符周围的空白

答案 1 :(得分:15)

http://www.python.org/dev/peps/pep-0008/#other-recommendations

  

始终围绕这些二元运算符,两边都有一个空格:赋值(=),扩充赋值(+ =, - =等),比较(==,&lt;,&gt;,!=,&lt;&gt; ;,&lt; =,&gt; =,in,not in,is,is not),布尔(和,或,不)。

例外情况是=用于设置命名参数。

编辑:

我查看了Python标准库的源代码,发现上面出现的场景:

http://hg.python.org/cpython/file/9ddc63c039ba/Lib/json/decoder.py#l203

            end = _w(s, end + 1).end()

答案 2 :(得分:0)

对于算术运算符,我通常在+和-周围放置空格,但不能在*,**和/中放置空格。这是一个示例:

(...)
alpha__w = (wave__w - central_w_par*doppler_factor)/sig_par
e1__w = np.exp(-.5*(alpha__w**2))
Y1__w = norm*e1__w/(sig_par*(2*np.pi)**.5)
(...)