Saya menguji struktur tupel, dan saya merasa aneh ketika saya menggunakan ==
operator seperti:
>>> (1,) == 1,
Out: (False,)
Ketika saya menetapkan dua ekspresi ini ke variabel, hasilnya benar:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
Pertanyaan ini berbeda dari Python tuple trailing comma syntax rule dalam pandangan saya. Saya menanyakan kelompok ekspresi di antara ==
operator.
python
tuples
equals-operator
Pythoner
sumber
sumber
Jawaban:
Jawaban lain telah menunjukkan kepada Anda bahwa perilaku tersebut karena prioritas operator, seperti yang didokumentasikan di sini .
Saya akan menunjukkan kepada Anda bagaimana menemukan jawabannya sendiri saat Anda memiliki pertanyaan yang serupa dengan ini. Anda dapat mendekonstruksi bagaimana ekspresi parsing menggunakan
ast
modul:Dari sini kita dapat melihat bahwa kode diurai seperti yang dijelaskan oleh Tim Peters :
sumber
dis
- Dalam hal ini, Anda akan melihat duaLOAD_CONST
dengan nilai berbeda ((1,)
dan1
) danBUILD_TUPLE
kode opp.Ini hanya prioritas operator. Anda lebih dulu
kelompok seperti ini:
jadi buat tupel dengan satu elemen dari hasil perbandingan tupel satu elemen
1,
dengan bilangan bulat1
untuk persamaan Mereka tidak sama, jadi Anda mendapatkan 1-tupelFalse,
sebagai hasilnya.sumber
1+2, 2==3, 4*7
melakukan tidak kelompok sebagai(1+2), (2==3), (4*7)
. Dalam praktiknya, 1-tuple hampir tidak pernah digunakan (baik, di luar pertanyaan StackOverflow ;-)).True
/False
. Sekarang saya mengerti apa yang terjadi, itu sangat jelas dan masuk akal.Saat kamu melakukan
itu membangun tupel dengan hasil dari membandingkan tupel
(1,)
dengan integer dan kemudian kembaliFalse
.Sebaliknya ketika Anda menetapkan ke variabel, dua tupel yang sama dibandingkan satu sama lain.
Anda dapat mencoba:
sumber