3

我在 PEP 中找不到有关按位运算符(|、&)样式的信息,尤其是在这段代码中:

class MySplashScreen(wx.SplashScreen):
    def __init__(self, parent=None):
        wx.SplashScreen.__init__(self, logo.getBitmap(), wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT, 2000, parent)

在这种情况下我应该使用空格(wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT)吗?

4

2 回答 2

2

我肯定会在两边使用空格。否则,很难发现|变量/常量名称之间的区别。

于 2013-02-04T00:39:40.540 回答
1

如果存在的话,可以在 PEP 8中的表达式中找到空格。但是,没有提到这些运算符:

始终在这些二元运算符两边加上一个空格:赋值 (=)、扩充赋值(+=、-= 等)、比较(==、<、>、!=、<>、<=、>= , in, not in, is, is not), 布尔值 (and, or, not)。

我认为这是有充分理由的。虽然您几乎可以肯定想要其中的空间wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,但我不确定您是否想要它a|b。事实上,like 的表达方式a&b | c&d似乎与推荐的x*x + y*y.

您在此处需要它的原因与操作符无关|,而是与值有关wx.SPLASH_CENTRE_ON_SCREEN。事实上,我认为你会做出同样的决定BIG_LONG_CONSTANT_1 + BIG_LONG_CONSTANT_2。因此,当操作数是丑陋的大写常量时,样式指南中可能应该有一条关于运算符周围空格的附加规则。

但与此同时,我认为没有或不需要关于按位运算符的特定规则。以与算术运算符相同的方式对待它们。(请注意,除了在同一表达式中使用具有不同优先级的运算符的情况外,是否在周围放置空格没有特定规则+。事实上,您可以在 PEP8 本身中看到这两种方式。那意味着它在一般情况下都是可以接受的,您必须在特定情况下使用自己的判断。)

综上所述,样式检查器pep8使用 E225 标记不带空格的位和算术运算符。它甚至用可选的 E226 警告标记“不同优先级”的示例,例如x = x/2 - 1(PEP 8 将其列为“好”)。详情请参阅missing_whitespace_around_operator。我不认为这算作任何形式的官方认可——但我认为“我把空格放在这里是为了让代码通过我们选择用于这个项目的样式检查器”是一个非常正当的理由。(但您可能想要检查替代方案,例如pep8ify, 并查看pylint,pyflakes等是否有关于该主题的内容。)

于 2013-02-04T00:48:00.360 回答