Mai mult
Comparație șir în Python: este vs ==
Am observat un script Python scriam era incordat, și a urmărit-o buclă infinită, în cazul în care bucla condiție a fost în timp ce linia nu este ''
. Care trece prin ea in debugger, s-a dovedit că linia a fost de fapt''
. Când l-am schimbat cu!=''
mai degrabă decât nu este ''
, ea a lucrat bine.
De asemenea, este considerat, în general, mai bine să folosiți doar '==' în mod implicit, chiar și atunci când se compară int sau valori Booleene? Am'am plăcut întotdeauna să folosi 'este' pentru că mi se pare mai estetic plăcut și pythonic (care este modul în care am căzut în capcana asta...), dar mă întreb dacă-l's destinat să fie rezervate pentru atunci când îți pasă de constatare două obiecte cu aceeași identitate.
519
4
Nu întotdeauna. NaN este un contraexemplu. Dar de obicei, identitatea ("este") implică egalitatea (
==
). Reciproca nu este adevărată: Două obiecte diferite pot avea aceeași valoare.Utilizați
==
, atunci când se compară valorile și "este" atunci când se compară identități.Atunci când se compară int (sau imuabil tipuri, în general), ai destul de mult întotdeauna vrei fostul. Nu's o optimizare care permite mici numere întregi pentru a fi comparat cu "este", dar nu't să se bazeze pe ea.
Pentru valori booleene, nu ar trebui't face comparații, la toate. În loc de:
scrie:
Pentru a compara împotriva "Nici unul",
e Nimeni
este preferat== None
.Da, asta's exact ceea ce-l's pentru.
Aș vrea să vă arăt un mic exemplu despre cum
este
și==
sunt implicate în tipuri imuabile. Incearca asta:"este" compară două obiecte din memorie,
==
compară valorile lor. De exemplu, puteți vedea că mici numere întregi sunt memorate în cache de Python:Ar trebui să utilizați
==
, atunci când se compară valorile și "este" atunci când se compară identități. (De asemenea, dintr-o engleză punct de vedere, "este egal" este diferit de la "este".)Logica nu este eronată. Declarația
ar trebui să nu să fie citit pentru a înțelege
Este o eroare logică, pe de o parte cititorului să presupunem că converse de o logica afirmatia este adevarata. A se vedea http://en.wikipedia.org/wiki/Converse_(logica)
A se vedea Această întrebare
Logica ta în lectură
este ușor greșită.
Dacă "este" se aplică atunci
==
va fi Adevărat, dar NU se aplică în sens invers.==
poate produce Adevărate în timp ce "este" dă False.