Észrevettem, hogy egy Python szkript, amit írtam, mókásan viselkedik, és egy végtelen ciklusra vezettem vissza, ahol a ciklus feltétele a while line is not ''
volt. A hibakeresőben végigfuttatva kiderült, hogy a sor valóban ''
. Amikor a is not '''
helyett !=''
-re változtattam, már működött is.
Továbbá, általában jobbnak tartják, ha alapértelmezés szerint csak a '==' -t használjuk, még int vagy Boolean értékek összehasonlításakor is? Mindig is szerettem használni a 'is' -t, mert esztétikusabbnak és pythonicnak tartom (így estem ebbe a csapdába...), de kíváncsi vagyok, hogy vajon csak akkor kell-e fenntartani, ha két azonos id-vel rendelkező objektumot akarsz találni.
Minden beépített Python-objektum (mint például a stringek, listák, dicts, függvények, stb.), ha x az y, akkor az x==y szintén True.
Nem mindig. A NaN egy ellenpélda. De többnyire az azonosság (is
) egyenlőséget (==
) feltételez. A fordítottja nem igaz: két különböző objektumnak lehet ugyanaz az értéke.
Továbbá, általában jobbnak tartják-e, ha alapértelmezés szerint csak a '==' -t használjuk, még akkor is, ha int vagy Boolean értékek összehasonlításakor?
Az értékek összehasonlításakor a ==
-t használod, az azonosságok összehasonlításakor pedig az is
-t.
Az ints (vagy általában a megváltoztathatatlan típusok) összehasonlításakor nagyjából mindig az előbbit akarod használni. Van egy optimalizálás, amely lehetővé teszi, hogy kis egész számokat az is
-vel hasonlítsunk össze, de ne hagyatkozz rá.
Boolean értékek esetén egyáltalán nem szabad összehasonlításokat végezned. Helyette:
if x == True:
# do something
write:
if x:
# do something
A None
-val való összehasonlításhoz az is None
előnyösebb, mint a == None
.
Mindig is szerettem a 'is' használatát, mert
esztétikusabbnak találom. és pythonic (így kerültem bele a ebbe a csapdába...), de kíváncsi lennék, hogy ez hogy csak arra az esetre legyen fenntartva. ha két tárgyat akarsz találni. ugyanazzal az id-vel.
Igen, pontosan erre való.
Szeretnék egy kis példát mutatni arra, hogy a is
és a ==
hogyan szerepelnek a megváltoztathatatlan típusokban. Próbáld ki:
a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True
Az is
két objektumot hasonlít össze a memóriában, a ==
pedig az értékeiket. Láthatjuk például, hogy a kis egész számokat a Python gyorsítótárazza:
c = 1
b = 1
>>> b is c
True
Az értékek összehasonlításakor a ==
-t, az azonosságok összehasonlításakor pedig az is
-t kell használni. (Továbbá, angol szempontból a "equals" más, mint a "is").
Lásd Ez a kérdés
Az Ön logikája az olvasásban
Minden beépített Python-objektum (mint pl. stringek, listák, dicts, függvények, stb.), ha x az y, akkor az x==y is True.
kissé hibás.
Ha az is
érvényes, akkor az ==
igaz lesz, de fordítva NEM érvényes. A ==
igazat adhat, míg az is
hamisat.