用于移位操作和二进制按位操作的 Python文档说参数必须是整数,但是下面的表达式在没有错误的情况下进行求值,但是为<<和得到奇数结果>>.
&在使用布尔参数时,是否还有其他地方可以查找文档等,还是对评估和结果有一些很好的解释?
码:
# 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')
Run Code Online (Sandbox Code Playgroud)
bool是它的子类int,因此它们是整数.在特殊情况下True表现得像1和False行为一样0.
请注意,bool 只有重新实现&,|和^(来源:在源代码Objects/boolobject.c中蟒源),用于所述方法的所有其他操作int均采用[实际上是:继承],因此结果是intS和语义是那些整数的.
关于<<和>>,表达True << True相当于1 << 1即1 * 2 == 2,虽然False >> False是0 >> 0,即0 * 1 == 0.
你应该想到Python的True,并False作为1和0他们做算术运算的时候.重新实现&,|并且^ 只 影响返回类型,而不是语义.