移位和二进制位运算符适用于布尔参数

Mor*_*mer 2 python python-3.3

用于移位操作二进制按位操作的 Python文档说参数必须是整数,但是下面的表达式在没有错误的情况下进行求值,但是为<<和得到奇数结果>>.

&在使用布尔参数时,是否还有其他地方可以查找文档等,还是对评估和结果有一些很好的解释?

  • 对与错:错(类'bool')
  • 真的 错:真(类'布尔')
  • True ^ False:True(类'bool')
  • ~True:-2(类'int')
  • ~False:-1(类'int')
  • True << True:2(class'int')
  • False >> False:0(类'int')

码:

# 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)

Bak*_*riu 5

bool是它的子类int,因此它们整数.在特殊情况下True表现得像1False行为一样0.

请注意,bool 只有重新实现&,|^(来源:在源代码Objects/boolobject.c中蟒源),用于所述方法的所有其他操作int均采用[实际上是:继承],因此结果是intS和语义是那些整数的.

关于<<>>,表达True << True相当于1 << 11 * 2 == 2,虽然False >> False0 >> 0,即0 * 1 == 0.

你应该想到Python的True,并False作为10他们做算术运算的时候.重新实现&,|并且^ 影响返回类型,而不是语义.