Jeg la merke til at et Python-skript jeg skrev handlet ekorn, og sporet det til en uendelig løkke, der løkkebetingelsen var mens linjen ikke er ''
. Når jeg kjørte gjennom den i debuggeren, viste det seg at linjen faktisk var ' '
. Da jeg endret det til != ''
i stedet for er ikke ''
, fungerte det fint.
Også, er det generelt ansett som bedre å bare bruke '==' som standard, selv når du sammenligner int eller boolske verdier? Jeg har alltid likt å bruke 'is' fordi jeg synes det er mer estetisk tiltalende og pytonisk (som er hvordan jeg falt i denne fellen ...), men jeg lurer på om det er ment å bare være reservert for når du bryr deg om å finne to objekter med samme id.
For alle innebygde Python-objekter (for eksempel strenger, lister, terninger, funksjoner, etc.), hvis x er y, så er x==y også Sant.
Ikke alltid. NaN er et moteksempel. Men vanligvis innebærer identitet (er
) likhet (==
). Det motsatte er ikke sant: To forskjellige objekter kan ha samme verdi.
Også, er det generelt ansett som bedre å bare bruke '==' som standard, til og med når du sammenligner int eller boolske verdier?
Du bruker ==
når du sammenligner verdier og is
når du sammenligner identiteter.
Når du sammenligner ints (eller uforanderlige typer generelt), vil du stort sett alltid ha førstnevnte. Det finnes en optimalisering som gjør at små heltall kan sammenlignes med is
, men ikke stol på den.
For boolske verdier bør du ikke gjøre sammenligninger i det hele tatt. I stedet for:
if x == True:
# do something
skriver du
if x:
# do something
For å sammenligne med Ingen
, foretrekkes is Ingen
fremfor == Ingen
.
Jeg har alltid likt å bruke 'er'fordi Jeg synes det er mer estetisk tiltalende og pytonisk (som er hvordan jeg falt i denne fellen...), men jeg lurer på om det' s's ment å bare være reservert for når du bryr deg om å finne to objekter med samme id.
Ja, det er akkurat det den er til for.
Jeg vil gjerne vise et lite eksempel på hvordan er
og ==
er involvert i uforanderlige typer. Prøv det:
a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True
is
sammenligner to objekter i minnet, ==
sammenligner verdiene deres. Du kan for eksempel se at små heltall bufres av Python:
c = 1
b = 1
>>> b is c
True
Du bør bruke ==
når du sammenligner verdier og is
når du sammenligner identiteter. (Også fra et engelsk synspunkt er "equals" forskjellig fra "is").
Din logikk i lesingen
For alle innebygde Python-objekter (for eksempel strenger, lister, terninger, funksjoner, etc.), hvis x er y, så er x==y også Sant.
er litt mangelfull.
Hvis is
gjelder, vil ==
være sant, men det gjelder IKKE omvendt. ==
kan gi True mens is
gir False.