Python中的^ =运算子

时间:2018-11-19 12:51:21

标签: python

我已经使用Python一段时间了,我第一次从link碰到了这个运算符“ ^ =”。

def solution(A):
    result = 0
    for number in A:
        result ^= number
    return result

当然,我做了一些谷歌搜索,但似乎找不到该运算符。它是做什么的?

4 个答案:

答案 0 :(得分:2)

^=相关并在幕后被调用的特殊方法是__ixor__。与^相关的特殊方法是__xor__。他们不必表现相同。

__ixor__Augmented Assignment__xor__变体,在可能时执行就地操作,而在未实现__xor__时退回到__ixor__

原则上,该方法的返回值完全取决于__ixor__的实现,但是有一些常见的用例。

对于两个集合,a ^= b计算集合ab(所有元素恰好在两个集合之一中)的对称差 变异 a

>>> a = {1, 2, 3}
>>> b = {1, 4, 5}
>>> reference = a
>>> 
>>> a ^= b
>>> a
{2, 3, 4, 5}
>>> reference
{2, 3, 4, 5} 

请注意,a已被替换为 ,因此areference都指向同一个set对象{{1} } 在记忆中。因此,{2, 3, 4, 5}在这种情况下的行为与^=不同,它建立了一个新集合,如下所示。

^

请注意,>>> a = {1, 2, 3} >>> b = {1, 4, 5} >>> reference = a >>> a = a^b >>> a {2, 3, 4, 5} >>> reference {1, 2, 3} 建立了一个新集合,名称a = a^b已被重新分配,而a仍指原始集合{{1} }。

对于内置的不可变类型(如整数),reference确实等同于{1, 2, 3}。由于整数没有a ^= b方法,因此Python退回到使用a = a^b。 对于整数,__ixor__执行按位不等于运算,并将名称__xor__重新分配给该计算结果。

演示:

a ^= b

说明:

a

答案 1 :(得分:1)

  

^运算符产生其参数的按位XOR(异或),该值必须为整数。

https://docs.python.org/3/reference/expressions.html#binary-bitwise-operations

与所有其他_=运算符一样,^=将结果分配回变量:a =^ ba = a ^ b等效。

根据功能,它是__ixor__(或operator.ixor),并且对于非整数类型可能具有不同的行为。

答案 2 :(得分:1)

是XOR。 https://docs.python.org/3/reference/expressions.html#binary-bitwise-operations 例如:

9 ^ 1

输出:

8

因为二进制文件9101,所以1001。 XOR操作的意思是:

101
001
output:
100 #or 8 in natural number

答案 3 :(得分:1)

a ^= b等同于a = a^b

^-是XOR运算符