1

只是一个简单的问题。

我见过的一些python函数是这样调用的,例如pygame:

pygame.display.set_mode((255, 255), FULLSCREEN)这对我来说似乎很正常。

但是当你想使用多个参数时,你必须使用 |。例如: pygame.display.set_mode((255, 255), FULLSCREEN | HWSURFACE | DOUBLEBUF)

您何时以及为什么想要这种电话?我听说它是​​按位 OR 运算符,但似乎仅适用于布尔值。这是如何运作的?

4

2 回答 2

2

它们是不同选项的标志。每个标志只是一个数字,特别是 2 的幂。您使用按位运算符|翻转所有您想要的标志的位。一个例子可能会有所帮助:

>>> import re
>>> re.VERBOSE
64
>>> re.IGNORECASE
2
>>> re.VERBOSE | re.IGNORECASE
66

所以如果re想知道IGNORECASE标志是否被设置,只需检查第二位(对于 2^1)是否等于 1。如果是,我们应该忽略大小写。如果它想知道是否是VERBOSE,它检查第 7 位(对于 2^6)。通过or将 2 和 64 组合在一起,您将得到一个第二位和第七位翻转的数字。

>>> 66 & 2
2
>>> 66 & 64
64
>>> 66 & 8
0

我们可以看到 66 触发了 2 和 64 的标志,但不是 8。

于 2012-05-23T20:42:41.020 回答
0

请注意按位 OR运算符与布尔 OR运算符之间的区别:

|是按位或运算符,即按位对操作数进行或运算:

>>> 1 | 2
3

那是因为 1 个二进制是001,2 个二进制是010,所以它们每比特的 OR 位是011,也就是 3。

or是布尔运算符。

>>> 1 or 2
1
>>> 0 or 2
2

运算符返回第or一个有效值( 非0、、None或)[]{}

于 2012-05-23T20:52:55.503 回答