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

用于调用函数的Python管道字符,python,pygame,arguments,bitwise-or,Python,Pygame,Arguments,Bitwise Or,只是一个简单的问题 我见过的一些python函数的调用如下所示,例如pygame: pygame.display.set_模式((255,255),全屏)我觉得这很正常 但是,如果要使用多个参数,则必须使用|。例如: pygame.display.set_模式((255,255),全屏| HWSURFACE | DOUBLEBUF) 你什么时候为什么要打这种电话?我听说它是按位OR运算符,但它似乎只适用于布尔值。这是如何工作的?它们是不同选项的标志。每个标志只是一个数字,特别是2的幂。您可以使用

只是一个简单的问题

我见过的一些python函数的调用如下所示,例如pygame:

pygame.display.set_模式((255,255),全屏)
我觉得这很正常

但是,如果要使用多个参数,则必须使用|。例如:
pygame.display.set_模式((255,255),全屏| HWSURFACE | DOUBLEBUF)


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

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

>>> import re
>>> re.VERBOSE
64
>>> re.IGNORECASE
2
>>> re.VERBOSE | re.IGNORECASE
66
因此,如果
re
想知道是否设置了
IGNORECASE
标志,则只需检查第二位(对于2^1)是否等于1。如果是这样的话,我们应该忽略这个案例。如果它想知道是否是
VERBOSE
,它会检查第7位(2^6)。通过
将2和64组合在一起,可以得到第二位和第七位翻转的数字

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

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

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

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

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

是布尔运算符

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

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

请问,从哪里可以得到二进制数表(001=1)?更具体地说,是“二进制计数”部分