今天,我在 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的,所以我猜是某种字节操作?我似乎找不到关于这个搜索网站除了它的行为奇怪的浮动,有人有一个链接到这个操作员做什么,或者你可以解释它在这里?
它是一个逐位排他的或。二进制逐位运算符在 Python 语言参考文献的第5章中有文档说明。
它是一个按位 XOR(独占 OR)。
当且仅当它的参数不同(一个是 True,另一个是 False)时,它的计算结果为 True。
True
False
示范:
>>> 0^0 0 >>> 1^1 0 >>> 1^0 1 >>> 0^1 1
解释一下你自己的例子:
>>> 8^3 11
这么想吧:
1000 # 8 (binary) 0011 # 3 (binary) ---- # APPLY XOR ('vertically') 1011 # result = 11 (binary)
它根据需要调用对象的 __xor__()或 __rxor__()方法,对于整数类型,该方法执行按位排它-or。
__xor__()
__rxor__()
一般来说,符号 ^是 中缀版本的 __xor__或 __rxor__方法。无论数据类型放置在符号的左右,都必须以兼容的方式实现这个函数。对于整数,它是常见的 XOR操作,但是例如,对于 float类型和 int类型,没有内置的函数定义:
^
__xor__
__rxor__
XOR
float
int
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的实例,^符号表示指数。
Foo
In [16]: x = Foo(3) In [17]: x Out[17]: 3.0 In [18]: x ^ 4 Out[18]: 81.0
当使用 ^运算符时,在幕后调用方法 __xor__ 强 >。
a^b等于 a.__xor__(b)。
a^b
a.__xor__(b)
此外,a ^= b等价于 a = a.__ixor__(b)(当使用 ^=隐式调用 __ixor__但不存在时,__xor__用作后备)。
a ^= b
a = a.__ixor__(b)
^=
__ixor__
原则上,__xor__所做的完全取决于它的实现:
演示:
>>> a = {1, 2, 3} >>> b = {1, 4, 5} >>> a^b {2, 3, 4, 5} >>> a.symmetric_difference(b) {2, 3, 4, 5}
>>> a = 5 >>> b = 6 >>> a^b 3
说明:
101 (5 decimal) XOR 110 (6 decimal) ------------------- 011 (3 decimal)