Perbandingan String di Python: adalah vs. ==
Aku melihat sebuah script Python saya menulis bertindak acak adut, dan ditelusuri ke loop tak terbatas, di mana kondisi loop adalah sementara line tidak ''
. Berjalan melalui itu dalam debugger, ternyata itu adalah fakta''
. Ketika aku berubah ke!=''
daripada tidak ''
, itu bekerja dengan baik.
Juga, itu umumnya dianggap baik untuk hanya menggunakan '==' secara default, bahkan ketika membandingkan int atau nilai-nilai Boolean? I've selalu menyukai untuk menggunakan 'adalah' karena aku merasa lebih estetis dan pythonic (yang adalah bagaimana saya jatuh ke dalam perangkap ini...), tapi aku bertanya-tanya jika itu's dimaksudkan untuk hanya diperuntukkan bagi ketika anda peduli tentang menemukan dua benda dengan id yang sama.
Tidak selalu. NaN adalah sebuah counterexample. Tapi biasanya, identitas (
adalah
) menyiratkan kesetaraan (==
). Sebaliknya adalah tidak benar: Dua objek yang berbeda dapat memiliki nilai yang sama.Anda menggunakan
==
ketika membandingkan nilai-nilai danlebih
ketika membandingkan identitas.Ketika membandingkan int (atau berubah jenis secara umum), anda cukup banyak selalu ingin mantan. Ada's optimasi yang memungkinkan kecil bilangan bulat yang akan dibandingkan dengan
lebih
, tapi don't bergantung pada itu.Untuk nilai boolean, seharusnya kau't melakukan perbandingan pada semua. Bukannya:
menulis:
Untuk membandingkan terhadap
Tidak ada
,Tidak
lebih disukai== None
.Ya, itu's apa itu's untuk.
Saya ingin menunjukkan sebuah contoh kecil tentang bagaimana
ini
dan==
terlibat dalam berubah jenis. Coba itu:lebih
dibandingkan dua objek dalam memori,==
membandingkan nilai-nilai mereka. Misalnya, anda dapat melihat bahwa bilangan bulat yang di-cache oleh Python:Anda harus menggunakan
==
ketika membandingkan nilai-nilai danlebih
ketika membandingkan identitas. (Juga, dari bahasa inggris dengan point of view, "sama dengan" berbeda dari "adalah".)Logika tidak cacat. Pernyataan
harus tidak pernah bisa baca berarti
Itu adalah kesalahan logis pada bagian dari pembaca untuk mengasumsikan bahwa kebalikan dari logika pernyataan ini benar. Lihat http://en.wikipedia.org/wiki/Converse_(logika)
Lihat pertanyaan
Logika anda dalam membaca
sedikit cacat.
Jika
adalah
berlaku kemudian==
akan menjadi Kenyataan, tetapi TIDAK berlaku sebaliknya.==
dapat menghasilkan True sementaraadalah
hasil yang Palsu.