用于调用函数的Python管道字符

时间:2012-05-23 20:36:22

标签: python pygame arguments bitwise-or

只是一个简单的问题。

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

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

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

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

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

注意按位OR 运算符与 boolean OR 运算符之间的区别:

|是按位OR运算符,也就是说,OR运算是每位操作数的位:

>>> 1 | 2
3

这是因为1个二进制文件是001,2个二进制文件是010,所以它们的每位OR位是011,即3。

or是布尔运算符。

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

or运算符返回第一个有效值(不是0None[]{}