Python'da dize karşılaştırması: is vs. ==
Yazdığım bir Python betiğinin tuhaf davrandığını fark ettim ve döngü koşulunun while line is not ''
olduğu sonsuz bir döngünün izini sürdüm. Hata ayıklayıcıda çalıştırdığımda, o satırın aslında ''
olduğu ortaya çıktı. Bunu is not ''
yerine !=''
olarak değiştirdiğimde, sorunsuz çalıştı.
Ayrıca, int veya Boolean değerleri karşılaştırırken bile varsayılan olarak sadece '==' kullanmak genellikle daha mı iyi kabul edilir? Ben her zaman 'is' kullanmayı sevmişimdir çünkü bunu daha estetik ve pythonic buluyorum (bu tuzağa nasıl düştüm...), ancak aynı id'ye sahip iki nesneyi bulmayı önemsediğinizde bunun sadece ayrılmış olması mı amaçlanıyor merak ediyorum.
519
3
Her zaman değil. NaN bir karşı örnektir. Ancak genellikle, özdeşlik (
is
) eşitlik (==
) anlamına gelir. Tersi doğru değildir: İki farklı nesne aynı değere sahip olabilir.Değerleri karşılaştırırken
==
, özdeşlikleri karşılaştırırkenis
kullanırsınız.İnt'leri (veya genel olarak değişmez türleri) karşılaştırırken, hemen hemen her zaman ilkini istersiniz. Küçük tamsayıların
is
ile karşılaştırılmasına izin veren bir optimizasyon vardır, ancak buna güvenmeyin.Boolean değerler için karşılaştırma yapmamanız gerekir. Bunun yerine:
Yaz:
None
ile karşılaştırmak için
== Noneyerine
is None` tercih edilir.Evet, tam olarak bunun için.
Değişmez tiplerde
is
ve==
nin nasıl yer aldığına dair küçük bir örnek göstermek istiyorum. Bunu deneyin:is
bellekteki iki nesneyi karşılaştırır,
==` ise bunların değerlerini karşılaştırır. Örneğin, küçük tamsayıların Python tarafından önbelleğe alındığını görebilirsiniz:Değerleri karşılaştırırken
==
ve özdeşlikleri karşılaştırırkenis
kullanmalısınız. (Ayrıca, İngilizce bakış açısından, "equals", "is"'den farklıdır).Bkz Bu soru
Okuma mantığınız
biraz kusurlu.
Eğer
is
geçerliyse,==
Doğru olacaktır, ancak tersi geçerli DEĞİLDİR. isdeğeri False verirken
==` değeri True verebilir.