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.

Mengomentari pertanyaan (3)
Larutan

Untuk semua built-in Python benda-benda (seperti string, list, dicts, fungsi, dll.), jika x adalah y, maka x==y juga Benar.

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.

Juga, itu umumnya dianggap baik untuk hanya menggunakan '==' secara default, bahkan ketika membandingkan int atau nilai-nilai Boolean?

Anda menggunakan == ketika membandingkan nilai-nilai dan lebih 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:

if x == True:
    # do something

menulis:

if x:
    # do something

Untuk membandingkan terhadap Tidak ada, Tidak lebih disukai == None.

I've selalu menyukai untuk menggunakan 'adalah' karena saya merasa lebih estetis dan pythonic (yang adalah bagaimana saya jatuh ke 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.

Ya, itu's apa itu's untuk.

Komentar (18)

Saya ingin menunjukkan sebuah contoh kecil tentang bagaimana ini dan == terlibat dalam berubah jenis. Coba itu:

a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True

lebih dibandingkan dua objek dalam memori, == membandingkan nilai-nilai mereka. Misalnya, anda dapat melihat bahwa bilangan bulat yang di-cache oleh Python:

c = 1
b = 1
>>> b is c
True

Anda harus menggunakan == ketika membandingkan nilai-nilai dan lebih ketika membandingkan identitas. (Juga, dari bahasa inggris dengan point of view, "sama dengan" berbeda dari "adalah".)

Komentar (4)

Logika tidak cacat. Pernyataan

jika x adalah y maka x==y juga Benar

harus tidak pernah bisa baca berarti

jika x==y maka x adalah y

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)

Komentar (2)

Lihat pertanyaan

Logika anda dalam membaca

Untuk semua built-in Python benda-benda (seperti string, list, dicts, fungsi, dll.), jika x adalah y, maka x==y juga Benar.

sedikit cacat.

Jika adalah berlaku kemudian == akan menjadi Kenyataan, tetapi TIDAK berlaku sebaliknya. == dapat menghasilkan True sementara adalah hasil yang Palsu.

Komentar (2)