Viac na
Porovnávanie reťazcov v jazyku Python: is vs. ==
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.
519
3
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.Pri porovnávaní hodnôt sa používa
==
a pri porovnávaní identítje
.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:
napíšte:
Pri porovnávaní s
None
sa uprednostňujeis None
pred== None
.Á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: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:Pri porovnávaní hodnôt by ste mali používať
==
a pri porovnávaní identítis
. (Z anglického hľadiska sa tiež "equals" líši od "is").Pozri Táto otázka
Vaša logika pri čítaní
je mierne chybné.
Ak platí
je
, potom==
bude Pravda, ale NEplatí to naopak.==
môže dať True, zatiaľ čois
dá False.