In Python können Sie "wenn x y ist" oder "wenn x == y" schreiben.
Zu diesem Zeitpunkt können Sie sich mit is
und ==
verlaufen.
Daher sind die Unterschiede zwischen "is" und "==" unten zusammengefasst.
--is
vergleicht Objekte (ob sie dasselbe Objekt sind)
--==
vergleicht Werte (ob sie der gleiche Wert sind)
x = <object A>
Ist definiert,
if x is <object A>:
Dies ist der Fall, wenn Sie einen bedingten Ausdruck schreiben möchten.
Natürlich für Richtig / Falsch-Vergleiche
x = True
Definieren,
if x is True:
Ist kein Fehler, aber in diesem Fall pythonisch
if x:
Es ist gut zu schreiben.
→ Der Grund, warum x True ist, ist in Ordnung, weil die Bool-Klasse True / False so konzipiert ist, dass es jeweils nur eine gibt.
The values False and True will be singletons, like None.
Quelle zitieren PEP285
x = 1234
Ist definiert,
if x == 1234:
Dies ist der Fall, wenn Sie einen bedingten Ausdruck schreiben möchten.
Nicht verwechseln ist mit ==, und verwenden Sie sie richtig.
Fußnote 1 Inhalt im Kommentarbereich von @ 7of9
https://docs.python.org/3.6/library/functions.html#id
id(object) ... CPython implementation detail: This is the address of the object in memory.
Ist die Basis des Dokuments.
Fußnote 2 Inhalt im Kommentarbereich von @shiracamus
Ich habe die Quelle von CPython überprüft. "is" wurde durch Is ersetzt, Is wurde durch PyCmp_IS ersetzt und PyCmp_IS verglich die Adressen wie folgt:
Python/ceval.c
static PyObject *
cmp_outcome(int op, register PyObject *v, register PyObject *w)
{
int res = 0;
switch (op) {
case PyCmp_IS:
res = (v == w);
break;
case PyCmp_IS_NOT:
res = (v != w);
break;
Am Ende führen wir einen Adressvergleich durch.
Recommended Posts