Všimol som si, že skript v jazyku Python, ktorý som písal, sa správal čudne, a vystopoval som ho do nekonečnej slučky, kde podmienka slučky bola while line is not ''
. Keď som ho prechádzal v debuggeri, ukázalo sa, že tento riadok je v skutočnosti ''
. Keď som ho zmenil na !=''
namiesto nie je ''
, fungovalo to dobre.
Okrem toho, je všeobecne považované za lepšie štandardne používať len '==', a to aj pri porovnávaní intových alebo logických hodnôt? Ja'som vždy rád používal 'is', pretože mi to príde estetickejšie a pythonickejšie (čím som sa dostal do tejto pasce...), ale zaujímalo by ma, či je to'určené len na prípady, keď vám záleží na nájdení dvoch objektov s rovnakým id.
Pre všetky vstavané objekty Pythonu (ako napr. reťazce, zoznamy, dicts, funkcie, atď.), ak x je y, potom x==y je tiež Pravda.
Nie vždy. NaN je protipríklad. Ale obvykle z identity (je
) vyplýva rovnosť (==
). Obrátený postup nie je pravdivý: Dva rôzne objekty môžu mať rovnakú hodnotu.
Takisto sa všeobecne považuje za lepšie používať '==' štandardne, aj keď pri porovnávaní intových alebo logických hodnôt?
Pri porovnávaní hodnôt sa používa ==
a pri porovnávaní identít je
.
Pri porovnávaní intov (alebo všeobecne nemenných typov) chcete v podstate vždy použiť prvý typ. Existuje optimalizácia, ktorá umožňuje porovnávať malé celé čísla pomocou is
, ale nespoliehajte sa na ňu.
V prípade logických hodnôt by ste nemali porovnávať vôbec. Namiesto toho:
if x == True:
# do something
napíšte:
if x:
# do something
Pri porovnávaní s None
sa uprednostňuje is None
pred == None
.
Vždy som rád používal 'is', pretože považujem ho za estetickejšie a pitoreskné (tak som sa dostal k tejto pasce...), ale zaujímalo by ma, či je to's určený len na to, aby bol vyhradený pre prípad, keď vám záleží na nájdení dvoch objektov s rovnakým id.
Áno, presne na to to slúži.
Chcel by som ukázať malý príklad, ako sa is
a ==
podieľajú na nemenných typoch. Skúste to:
a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True
is
porovnáva dva objekty v pamäti, ==
porovnáva ich hodnoty. Môžete si napríklad všimnúť, že malé celé čísla sú v Pythone ukladané do vyrovnávacej pamäte:
c = 1
b = 1
>>> b is c
True
Pri porovnávaní hodnôt by ste mali používať ==
a pri porovnávaní identít is
. (Z anglického hľadiska sa tiež "equals" líši od "is").
Pozri Táto otázka
Vaša logika pri čítaní
Pre všetky vstavané objekty Pythonu (ako napr. reťazce, zoznamy, dicts, funkcie, atď.), ak x je y, potom x==y je tiež pravda.
je mierne chybné.
Ak platí je
, potom ==
bude Pravda, ale NEplatí to naopak. ==
môže dať True, zatiaľ čo is
dá False.