shifting operations和binary bitwise operations的Python文档说参数必须是整数,但下面的表达式会毫无错误地进行求值,但会给<<
和>>
带来奇怪的结果。< / p>
在使用布尔参数时,我是否应该寻找&
等文档的其他位置,或者对评估和结果有一些很好的解释?
代码:
# Python ver. 3.3.2
def tryout(s):
print(s + ':', eval(s), type(eval(s)))
tryout('True & False')
tryout('True | False')
tryout('True ^ False')
tryout('~ True')
tryout('~ False')
tryout('True << True')
tryout('False >> False')
答案 0 :(得分:5)
bool
是int
的子类,因此是整数。特别是True
的行为与1
相似,False
的行为与0
相似。
请注意bool
仅重新实现&
,|
和^
(来源:python中Objects/boolobject.c
的源代码对于所有其他操作,使用int
的方法[实际上:继承],因此结果是int
s,语义是整数的那些。
关于<<
和>>
,表达式True << True
相当于1 << 1
,即1 * 2 == 2
,而False >> False
是0 >> 0
,即0 * 1 == 0
。
在对它们进行算术运算时,您应该将python的True
和False
视为1
和0
。仅重新实现&
,|
和^
affect the return type,而不是语义。