我今天在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,所以我猜是某种字节操作?我似乎找不到太多关于这个搜索的网站,除了它对浮动的行为很奇怪,有人有这个操作符的链接吗?或者你能在这里解释一下吗?
tpxzln5u1#
这是一个按位XOR(异或)。当且仅当它的参数不同(一个是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)
w1e3prcc2#
它根据需要调用对象的__xor__()或__rxor__()方法,对于整数类型,该方法执行按位异或。
__xor__()
__rxor__()
owfi6suc3#
这是一个逐位的异或。二进制位运算符在Python语言参考的第5章中有说明。
lymnna714#
一般来说,符号^是__xor__或__rxor__方法的infix版本。无论放置在符号左右的数据类型是什么,都必须以兼容的方式实现此函数。对于整数,它是常见的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
yhqotfr85#
当你使用^操作符时,幕后的方法**__xor__**被调用。a^b等于a.__xor__(b)。此外,a ^= b等效于a = a.__ixor__(b)(其中,当__ixor__通过使用^=隐式调用但不存在时,__xor__用作回退)。原则上,__xor__做什么完全取决于它的实现。Python中的常见用例有:
a^b
a.__xor__(b)
a ^= b
a = a.__ixor__(b)
__ixor__
^=
*集合的对称差(所有元素恰好存在于两个集合之一)
演示:
>>> 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)
5条答案
按热度按时间tpxzln5u1#
这是一个按位XOR(异或)。
当且仅当它的参数不同(一个是
True
,另一个是False
)时,它的值为True
。演示:
举一个你自己的例子:
你可以这样想:
w1e3prcc2#
它根据需要调用对象的
__xor__()
或__rxor__()
方法,对于整数类型,该方法执行按位异或。owfi6suc3#
这是一个逐位的异或。二进制位运算符在Python语言参考的第5章中有说明。
lymnna714#
一般来说,符号
^
是__xor__
或__rxor__
方法的infix版本。无论放置在符号左右的数据类型是什么,都必须以兼容的方式实现此函数。对于整数,它是常见的XOR
操作,但是例如,对于类型为float
的函数,没有内置的定义类型为int
:Python的一个好处是,您可以在自己的类中覆盖此行为。例如,在某些语言中,
^
符号表示取幂。你可以这样做,举个例子:然后类似这样的东西就可以工作了,现在,* 仅针对
Foo
的示例 *,^
符号将表示求幂。yhqotfr85#
当你使用
^
操作符时,幕后的方法**__xor__
**被调用。a^b
等于a.__xor__(b)
。此外,
a ^= b
等效于a = a.__ixor__(b)
(其中,当__ixor__
通过使用^=
隐式调用但不存在时,__xor__
用作回退)。原则上,
__xor__
做什么完全取决于它的实现。Python中的常见用例有:*集合的对称差(所有元素恰好存在于两个集合之一)
演示:
*按位不相等表示两个整数的位
演示:
说明: