我有这段代码:
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样式时,在函数的参数中是否需要围绕运算符(+, - ,*,/等)的空格?
答案 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,这些例子仍然令人困惑,似乎意味着比散文更严格,更不主观的规则。
还有一条规则要求某些特定运算符周围的空格:
始终围绕这些二元运算符,两边都有一个空格:赋值(
=
),扩充赋值(+=
,-=
等),比较(==
,<
,>
,!=
,<>
,<=
,>=
,in
,not in
,{ {1}},is
),布尔(is not
,and
,or
)。
但请注意,此规则明确指出它所引用的运算符以及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)
(...)