is
und ==
==
wird beurteilt nach "ob es der gleiche Wert ist", während is
beurteilt wird nach" ob es das gleiche Objekt ist ".
Zum Beispiel im folgenden Beispiel
>>> a = "hello"
>>> b = "hello"
Beide Objekte haben den gleichen Wert. Im Vergleich zu "==" wird "True" zurückgegeben.
>>> a == b
True
"Ist" wird jedoch beurteilt durch "Ist es das gleiche Objekt?"
Wenn Sie in Python ein Objekt erstellen, erhält es eine eindeutige Nummer. is
wird durch seine Nummer identifiziert.
Sie können die Nummer mit id ()
überprüfen.
>>> id(a)
2827074142256
>>> id(b)
2827074145520
>>> a is b
False
isinstance
ist eine Funktion, die die Objektklassen vergleicht.
Gibt im Vergleich zur übergeordneten Klasse "True" zurück, wenn sie von einer anderen Klasse geerbt wurde
>>> class customint(int):
... pass
...
>>> c = customint()
>>> type(c) == int
False
>>> type(c) is int
False
>>> isinstance(c, int)
True
Führen Sie jede Funktion 10.000.000 Mal (10 Millionen Mal) aus und messen Sie die Ausführungszeit Wiederholen Sie diesen Vorgang 10 Mal, um den Durchschnitt zu berechnen Als Referenz führe ich auch eine Funktion aus, die 10.000.000 Mal wiederholt wird, ohne etwas zu tun
#!/usr/bin/env python3
# coding: utf-8
from time import time
intvar = 0
n = 10 ** 7
def gettime(name, num=10):
"""
10 Mal ausführen, die Ausführungszeit messen und den Durchschnitt berechnen
"""
def func(fn):
def wrapper(*args, **kwargs):
strat_t = time()
for a in range(num):
fn(*args, **kwargs)
dur = (time() - strat_t) / 10
print(name, "\t:", dur)
return wrapper
return func
@gettime("simple\t")
def simple():
for x in range(n):
pass
@gettime("equal\t")
def equal():
for x in range(n):
res = type(intvar) == int
if type(intvar) == True:
pass
@gettime("is\t")
def iscompare():
for x in range(n):
res = type(intvar) is int
@gettime("isinstance")
def isinstancecompare():
for x in range(n):
res = isinstance(intvar, int)
if __name__ == '__main__':
simple()
equal()
iscompare()
isinstancecompare()
(Einheit: Sekunden)
Ausführungsumgebung | Windows 10 Intel Core i7-8550U @ 1.80GHz RAM:16GB |
Sakuras VPS(v3) 1G |
---|---|---|
Leere Schleife | 0.1508335590362549 | 0.37562224864959715 |
== |
0.8364578723907471 | 1.9130330801010131 |
is |
0.8253042459487915 | 1.799116063117981 |
isinstance |
0.5259079456329345 | 1.3679522275924683 |
Ausführungszeit ist
==
> is
>>> isinstance
Es wurde ein Gefühl.
Damit
Im Fall von "ist Instanz",
Verwenden Sie in diesem Fall is
.
Ich habe den Dekorateur zum ersten Mal benutzt, aber es ist wirklich praktisch