Natknąłem się dziś na operatora karetki w Pythonie i wypróbowując go, otrzymałem następujący wynik:
>>> 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
>>>
Wydaje się, że jest oparty na 8, więc zgaduję, że jest to operacja na bajtach? Wydaje się, że nie mogę znaleźć zbyt wiele informacji na temat tych witryn wyszukiwania, poza tym, że zachowuje się dziwnie w przypadku pływaków, czy ktoś ma link do tego, co robi ten operator, czy możesz to tutaj wyjaśnić?
help('^')
**
operatora potęgowania.help('^')
nic nie robi w moim Pythonie 2.6.1 (kompilacja Apple). @ S.Lott: czy masz na myśli to ( docs.python.org/reference/… ), kiedy mówisz „całkowicie zakryte” ?. Wydaje się trochę rzadkie dla kogoś, kto nie jest zaznajomiony z tą koncepcją ...Odpowiedzi:
To bitowe XOR (ekskluzywne OR).
Daje wynik true, jeśli jeden (i tylko jeden) z operandów (przyjmuje wartość) true.
Aby zademonstrować:
Aby wyjaśnić jeden z własnych przykładów:
Pomyśl o tym w ten sposób:
źródło
1
w tym samym bicie, aby to wyjaśnić1 xor 1 = 0
.0bX
gdzie X jest twoim binarnym.0b0001
,0b0010
itp. Więc0b1101 ^ 0b1110
dałby ci0b0011
(lub 3).W razie potrzeby wywołuje metodę
__xor__()
lub__rxor__()
obiektu, co w przypadku typów całkowitych wykonuje bitowe wyłączanie lub.źródło
Jest to krok po kroku na wyłączność - lub. Binarne operatory bitowe są udokumentowane w rozdziale 5 podręcznika Python Language Reference .
źródło
Ogólnie rzecz biorąc, symbol
^
jest wersją wrostkową metod__xor__
lub__rxor__
. Jakiekolwiek typy danych są umieszczone po prawej i lewej stronie symbolu, muszą implementować tę funkcję w kompatybilny sposób. W przypadku liczb całkowitych jest to typowaXOR
operacja, ale na przykład nie ma wbudowanej definicji funkcji dla typufloat
z typemint
:Jedną fajną rzeczą w Pythonie jest to, że możesz nadpisać to zachowanie w swojej własnej klasie. Na przykład w niektórych językach
^
symbol oznacza potęgowanie. Możesz to zrobić w ten sposób, na przykład:Potem coś jak to będzie działać, a teraz do wystąpień
Foo
tylko The^
symbol oznacza potęgowanie.źródło
+
operatora?+
symbol może wykonać jedną akcję dlalist
(konkatenację), podczas gdy inny rodzaj akcji (dodawanie matematyczne) dla typów liczbowych. W takim przypadku zastąpiłbyś metody__add__
lub__radd__
w swojej klasie.__r*__
wersja tych (like__rxor__
or__radd__
) zostanie wywołana z argumentu pojawiającego się po prawej stronie symbolu wrostka i tylko wtedy, gdy wywołanie funkcji dla symbolu lewej ręki nie działa. Możesz o tym myśleć w ten sposóbtry: left_hand_symbol.__xor__(right_hand_symbol); except: right_hand_symbol.__rxor__(left_hand_symbol)
, alexor
można to zastąpić dowolnym z dostępnych operatorów wrostków w modelu danych Pythona .int
konkatenację z ciągami znaków? człowieku, Python jest o wiele bardziej złożony niż myślałem(CompositionA | CompositionB) // CompositionC
co oznaczałoby po prostu „Odtwórz kompozycję A, a następnie kompozycję B, w międzyczasie grając jednocześnie kompozycję C w tym samym czasie”. Porozmawiaj o pięknym fragmencie kodu!Kiedy używasz
^
operatora, za zasłonami__xor__
wywoływana jest metoda .a^b
jest równaa.__xor__(b)
.Ponadto
a ^= b
jest równoważne za = a.__ixor__(b)
(gdzie__xor__
jest używane jako rezerwowe, gdy__ixor__
jest niejawnie wywoływane za pośrednictwem using^=
ale nie istnieje).W zasadzie to, co się
__xor__
dzieje, zależy całkowicie od jego wdrożenia. Typowe przypadki użycia w Pythonie to:Próbny:
Próbny:
Wyjaśnienie:
źródło