Saya berlari melintasi operator caret dengan python hari ini dan mencobanya, saya mendapatkan output berikut:
>>> 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
>>>
Tampaknya didasarkan pada 8, jadi saya menebak semacam operasi byte? Saya tidak dapat menemukan banyak tentang situs pencarian ini selain berperilaku aneh untuk float, apakah ada yang memiliki link ke apa yang dilakukan operator ini atau dapatkah Anda menjelaskannya di sini?
help('^')
**
, operator eksponen.help('^')
tidak melakukan apa pun dalam Python 2.6.1 saya (build apel). @ S.Lott: maksud Anda ini ( docs.python.org/reference/… ) saat Anda mengatakan "sepenuhnya tertutup" ?. Tampaknya agak jarang bagi seseorang yang tidak terbiasa dengan konsep ...Jawaban:
Ini XOR bitwise (eksklusif OR).
Hasilnya benar jika satu (dan hanya satu) dari operan (dievaluasi menjadi) benar.
Untuk menunjukkan:
Untuk menjelaskan salah satu contoh Anda sendiri:
Pikirkan seperti ini:
sumber
1
bit yang sama untuk memperjelasnya1 xor 1 = 0
.0bX
mana X adalah biner Anda.0b0001
,,0b0010
dll. Jadi,0b1101 ^ 0b1110
akan memberi Anda0b0011
(atau 3).Ini memanggil metode
__xor__()
atau__rxor__()
dari objek sesuai kebutuhan, yang untuk tipe integer melakukan eksklusif-or.sumber
Ini sedikit demi sedikit eksklusif-atau. Operator bitwise biner didokumentasikan di bab 5 Referensi Bahasa Python .
sumber
Secara umum, simbol
^
adalah versi infix dari__xor__
atau__rxor__
metode. Tipe data apa pun yang ditempatkan di kanan dan kiri simbol harus mengimplementasikan fungsi ini dengan cara yang kompatibel. Untuk bilangan bulat, ini adalahXOR
operasi umum , tetapi misalnya tidak ada definisi built-in dari fungsi untuk tipefloat
dengan tipeint
:Satu hal menarik tentang Python adalah Anda dapat mengganti perilaku ini di kelas Anda sendiri. Misalnya, dalam beberapa bahasa,
^
simbol itu berarti eksponen. Anda dapat melakukannya dengan cara ini, hanya sebagai satu contoh:Kemudian sesuatu seperti ini akan berhasil, dan sekarang, untuk contoh
Foo
saja ,^
simbol itu berarti eksponen.sumber
+
operator juga?+
simbol dapat melakukan satu jenis tindakan untuklist
(penggabungan) sambil melakukan jenis tindakan lain (penambahan matematis) untuk jenis numerik. Jika demikian, Anda akan mengganti metode__add__
atau__radd__
di kelas Anda.__r*__
versi ini (suka__rxor__
atau__radd__
) akan dipanggil dari argumen yang muncul di sisi kanan simbol infiks, dan hanya jika panggilan ke fungsi simbol tangan kiri tidak berfungsi. Anda dapat menganggapnya seperti itutry: left_hand_symbol.__xor__(right_hand_symbol); except: right_hand_symbol.__rxor__(left_hand_symbol)
, tetapixor
dapat diganti dengan salah satu operator infix yang tersedia dalam Model Data Python .int
penggabungan dengan string? Bung, python jauh lebih kompleks dari yang saya kira(CompositionA | CompositionB) // CompositionC
dan itu hanya berarti "Mainkan komposisi A diikuti oleh komposisi B, sementara itu juga memainkan komposisi C pada saat yang sama secara paralel." Bicara tentang sepotong kode yang indah!Saat Anda menggunakan
^
operator, di balik tirai__xor__
disebut metode .a^b
setara dengana.__xor__(b)
.Juga,
a ^= b
setara dengana = a.__ixor__(b)
(di mana__xor__
digunakan sebagai fallback ketika__ixor__
secara implisit dipanggil melalui using^=
tapi tidak ada).Pada prinsipnya apa yang
__xor__
dilakukan sepenuhnya terserah implementasinya. Kasus penggunaan umum di Python adalah:Demo:
Demo:
Penjelasan:
sumber