Python中按位运算符的用法

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)吗?

2个回答

2

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


你能给一个官方规范的链接吗? - art.zhitnik
没有自己的答案,但是 abarnert 解决了这个问题 :) - alex

1
如果存在的话,可以在PEP 8的表达式中的空格中找到这个位置。然而,这些运算符没有被提及: > 始终在这些二元运算符的两侧加上一个空格:赋值(=),增量赋值(+=,-=等),比较(==,<,>,!=,<>,<=,>=,in,not in,is,is not),布尔(and,or,not)。
我认为这是有充分理由的。虽然你几乎肯定想要在中加上空格,但我不确定你是否希望在中加上空格。实际上,像这样的表达式似乎是推荐的的很好的类比。
你希望在这里使用的原因与运算符|无关,而与值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,并查看 pylintpyflakes 等是否对此有任何意见。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接