Python中的脱字符(^)是做什么的?

我今天跑过Python中的插入符号运算符,并尝试出来,我得到了以下输出:

>>> 8^3 11 >>> 8^4 12 >>> 8^1 9 >>> 8^0 8 >>> 7^1 6 >>> 7^2 5 >>> 7^7 0 >>> 7^8 15 >>> 9^1 8 >>> 16^1 17 >>> 15^1 14 >>> 

它似乎是基于8,所以我猜测某种字节操作? 我似乎无法find很多关于这个search网站,除了它的行为奇怪的浮动,是否有人链接到这个操作员做什么,或者你可以在这里解释吗?

这是一个按位异或 (异或)。

如果一个 (且只有一个)操作数(计算结果为)为true,则结果为true。

展示:

 >>> 0^0 0 >>> 1^1 0 >>> 1^0 1 >>> 0^1 1 

解释一个你自己的例子:

 >>> 8^3 11 

这样想一想:

 1000#8(二进制)
 0011#3(二进制)
 ----#应用异或('垂直')
 1011#结果= 11(二进制)

它根据需要调用对象的__xor__()__rxor__()方法,这对于整数types来说是按位异或的。

这是一个一点点的排他性或。 二进制位运算符在Python语言参考的第五章中有记载。

一般来说,符号^__xor____rxor__方法的中缀版本。 无论数据types放置在符号的左侧还是右侧,都必须以兼容的方式实现此function。 对于整数,这是常见的XOR操作,但是例如,对于types为int float型函数没有内置的定义:

 In [12]: 3 ^ 4 Out[12]: 7 In [13]: 3.3 ^ 4 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-13-858cc886783d> in <module>() ----> 1 3.3 ^ 4 TypeError: unsupported operand type(s) for ^: 'float' and 'int' 

关于Python的一个很好的事情是,你可以在你自己的类中覆盖这个行为。 例如,在某些语言中, ^符号表示取幂。 你可以这样做,就像一个例子:

 class Foo(float): def __xor__(self, other): return self ** other 

那么像这样的东西将会起作用,而现在, 对于Foo^符号将意味着取幂。

 In [16]: x = Foo(3) In [17]: x Out[17]: 3.0 In [18]: x ^ 4 Out[18]: 81.0