插入符(^)运算符是做什么的?

今天,我在 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的,所以我猜是某种字节操作?我似乎找不到关于这个搜索网站除了它的行为奇怪的浮动,有人有一个链接到这个操作员做什么,或者你可以解释它在这里?

112320 次浏览

它是一个逐位排他的或。二进制逐位运算符在 Python 语言参考文献的第5章中有文档说明。

它是一个按位 XOR(独占 OR)。

当且仅当它的参数不同(一个是 True,另一个是 False)时,它的计算结果为 True

示范:

>>> 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操作,但是例如,对于 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的实例^符号表示指数。

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 = a.__ixor__(b)(当使用 ^=隐式调用 __ixor__但不存在时,__xor__用作后备)。

原则上,__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)