当你在 2013 年问的时候,你的 Vim 插件是错误的……但在 2010 年,当它被创作时。PEP 8 已多次更改,您问题的答案也已更改。
最初,PEP 8 包含以下短语:
在算术运算符周围使用空格
在那个规则下,
range(a, b+1)
是明确错误的,应该写成
range(a, b + 1)
这是pycodestyle(Python linter,以前称为 pep8.py,提问者的Vim 插件在后台使用)实施了几年的规则。
然而,这种情况在 2012 年 4 月发生了变化。直截了当、没有任何自由裁量余地的语言被这个更加模糊的建议所取代:
如果使用具有不同优先级的运算符,请考虑在具有最低优先级的运算符周围添加空格。使用您自己的判断;但是,永远不要使用多个空格,并且在二元运算符的两侧总是有相同数量的空格。
令人困惑的是,说明此规则的示例最初保持不变(因此与散文相矛盾)。这最终得到了解决,但不是很好,而且这些例子仍然令人困惑,似乎暗示了比散文更严格和更少主观的规则。
仍然有一条规则要求在某些特定运算符周围使用空格:
始终在这些二元运算符两边用一个空格括起来:赋值 ( =
)、扩充赋值 (+=
等-=
)、比较 ( ==
, <
, >
, !=
, <>
, <=
, >=
, in
, not in
, is
, is not
) 布尔值 ( and
, or
, not
)。
但请注意,该规则明确说明了它所指的运算符以及算术运算符+
不在列表中。
因此,当前形式的 PEP并没有规定您是否应该在+
运算符(或其他算术运算符,如*
and /
and **
)周围使用空格。你可以自由地“使用你自己的判断”。
顺便说一句,pycodestyle linter在 2012 年末改变了它的行为以反映 PEP 的变化,将关于在运算符周围使用空格的规则分成两个错误代码 E225(由于未能在 PEP 8 仍然需要空格的运算符周围使用空格)周围),默认情况下是打开的,E226(因为未能在算术运算符周围使用空格),默认情况下被忽略。考虑到他看到的错误,当他在 2013 年提出这个问题时,这里的提问者一定是使用了稍微过时的 linter 版本。