Когда вы используете оператор ^
, за занавесом вызывается метод __xor__
.
a^b
эквивалентно a.__xor__(b)
.
Кроме того, a ^= b
эквивалентно a = a.__ixor__(b)
(где __xor__
используется как запасной вариант, когда __ixor__
неявно вызывается с использованием ^=
, но не существует).
В принципе, то, что делает __xor__
, полностью зависит от его реализации. Типичные случаи использования в Python:
- Симметричная разница наборов (все элементы представлены ровно в одном из двух наборов)
Демо-версия:
>>> 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)