Es gibt viele Sprachen, die dieses Konzept haben, nicht nur Python. Nehmen wir als Beispiel Python.
Das Wort "gleich" hat zwei Bedeutungen. "Gleich" und "gleicher Wert".
Was meinst du? Die meisten Leute werden denken, dass Herr A und Herr B zusammen leben. Mit anderen Worten, Herr A und Herr B leben im "gleichen" Haus.
Was meinst du? Ich denke, dass nur wenige Leute denken, dass Herr A und Herr B "die gleichen" Kleider tragen, das heißt, zwei Menschen tragen ein Kleidungsstück. Es ist natürlich anzunehmen, dass Herr A und Herr B jeweils Kleidung tragen und dass die Kleidung, die Herr A trägt, und die Kleidung, die Herr B trägt, beispielsweise Kleidung desselben Herstellers und desselben Designs sind. ist.
Vielleicht sind die Dinge selbst anders, aber in gewissem Sinne können sie gleich genannt werden. Diese Beziehungen werden Äquivalenz oder Äquivalenz genannt.
Übrigens, wenn es keine einfache Sache wie eine ganze Zahl ist, sondern eine komplizierte Sache wie Kleidung, muss man darüber nachdenken, was als "gleichwertig" angesehen wird. Wenn die Größe der Kleidung ebenfalls in der Bedingung enthalten ist, wenn Herr A und Herr B unterschiedliche Größen haben, egal wie ähnlich sie sind, werden sie nicht als gleich angesehen. Wenn Sie die Größe der Kleidung nicht in den Zustand einbeziehen, wenn Sie ein Bekleidungskaufmann sind und der Kunde sagt "Da es sich um ein defektes Produkt handelt, ersetzen Sie es durch den gleichen Preis!", Können Sie eine andere Größe mitbringen. Vielleicht.
Wenn Sie es aufschreiben, ist es in vielen Fällen "gleich", wenn es "gleich" ist. Dies ist jedoch nicht immer der Fall, da dies davon abhängt, was als "gleich" angesehen wird.
Ist Herr B sicher?
Wenn Herr A und Herr B im selben Auto wären, wäre Herr B auch nicht sicher. Selbst wenn Herr A und Herr B im selben Auto (desselben Modells) sitzen, hat Herr B nichts damit zu tun, wenn sie nicht im selben Auto sitzen.
Wurde das Element aus der Liste der Variablen b entfernt?
Wenn Variable a und Variable b identisch sind, wurde das Element ebenfalls aus der Liste von b entfernt. Selbst wenn die Variable a und die Variable b den gleichen Wert haben, bleibt die Liste von b erhalten, wenn sie nicht gleich sind.
Auf diese Weise sind "gleicher" und "gleicher Wert" ähnliche und unterschiedliche Konzepte, aber im Allgemeinen wird der gleiche Wert häufiger verwendet als der gleiche Wert. Es ist oft notwendig, zwischen identischen und äquivalenten Werten zu unterscheiden, wenn der Vergleich für ein veränderliches Objekt wie eine Liste erfolgt. In einem Verarbeitungssystem wie Python, das Speicher außerhalb der Sichtweite des Programmierers zuweist, muss selten geprüft werden, ob unveränderliche Objekte tatsächlich auf dasselbe Objekt verweisen. Daher wird es selten für unveränderliche Objekte verwendet.
In Python ist der Operator, der die Identität überprüft, und der Operator, der die Gleichheit überprüft, ==. Der Operator, der nach nicht identischen Werten sucht, ist dies nicht, und der Operator, der nach nicht identischen Werten sucht, ist! =.
Die Operatoren ==,! = Können durch spezielle Methodennamen überladen werden. (Das heißt, Sie können definieren, wie die Äquivalenz verglichen werden soll, indem Sie eine Methode mit einem speziellen Namen erstellen.) Operatoren, die auf Identität prüfen, können nicht überladen werden.
In Python2 gibt es zwei Arten von speziellen Methodennamen, die == überladen (jedoch seit Python 2.1). In Python3 wurde einer abgeschafft und wurde zu einem Typ.
Die speziellen Methodennamen, die sowohl in Python 2 (aber Python 2.1 oder höher) als auch in Python 3 verwendet werden können, sind "eq (self, other)", was == entspricht, und "ne (self, other)", was! = Entspricht. .. Wenn Sie es in Zukunft erstellen möchten, zögern Sie nicht, es zu verwenden, wenn Sie nicht vorhaben, es unter Python 2.1 oder früher auszuführen.
Hier ist ein Codebeispiel.
class Car:
def __init__(self, maker, model, color, owner):
self.maker = maker
self.model = model
self.color = color
self.owner = owner
def __eq__(self, other):
try:
if (self.maker == other.maker and self.model == other.model and
self.color == other.color):
return True #Auch wenn die Besitzer unterschiedlich sind, gelten sie als dasselbe Auto
except AttributeError:
pass
return False
def __ne__(self, other):
return not self == other
my_car = Car("Nissan", "GT-R", "Red", "my name")
your_car = Car("Nissan", "GT-R", "Red", "your name")
his_car = Car("Nissan", "Note", "Blue", "his name")
my_garage = [my_car]
print(my_car == your_car) # ==> True
print(my_car == his_car) # ==> False
print(my_car is my_car) # ==> True
print(my_car is my_garage[0]) # ==> True
print(your_car is my_garage[0]) # ==> False
print(your_car == my_garage[0]) # ==> True
Die spezielle Methode "cmp (self, other)", die nur in Python2 verwendet werden kann, ist ein Operator, der die sechs Operatoren <, <=, ==,! =,> =,> Auf einmal und "cmp (self)" definiert. Wenn other) negativ ist, bedeutet es <, wenn es 0 ist, bedeutet es ==, und wenn es positiv ist, bedeutet es>. Ich empfehle es überhaupt nicht, da es in 3 nicht verwendet werden kann, aber es scheint, dass int sogar in der Python 2.7-Serie in
cmp` implementiert ist, also werde ich es für alle Fälle einführen.
Es ist ein Schlangenbein. Bei der neuen Methode müssen Sie zum Implementieren des Größenvergleichs zusätzlich zu "eq", aber Python 2.7, "ne", "lt", "le", "ge", "gt" definieren In den folgenden und 3 wird unter Verwendung von functools.total_ordering __eq ___
und __lt__
, __le__
Wenn Sie eines von "ge", "gt" definieren, wird der Rest für Sie erledigt.
Der Gleitkomma-Typ nan (keine Zahl) ist in keinem Vergleich der gleiche Wert. Selbst wenn Sie es mit sich selbst vergleichen, wird es daher nicht der gleiche Wert sein.
nan = float("nan")
print(nan is nan) # ==> True
print(nan == nan) # ==> False
Wenn ==, wie oben erwähnt, der Benutzer es nach Belieben implementieren kann, können in einigen Fällen Ausnahmen wie TypeError und AttributeError auftreten. True wird möglicherweise zurückgegeben, obwohl es nicht None ist, und die Verarbeitung ist möglicherweise sehr umfangreich. Hmm. Wenn Sie jedoch mit is vergleichen, können Sie definitiv vergleichen, ob der Wert None ist oder nicht. Dies liegt jedoch daran, dass [durch die Sprachspezifikationen garantiert] nur ein Objekt mit dem Wert None vorhanden ist (http://docs.python.jp/2/reference/datamodel.html#types). Du kannst es schaffen. Diese Verwendung ist problematisch, wenn mehrere Objekte mit demselben Wert vorhanden sein können.
Grundsätzlich ist es schneller. Es gibt jedoch nur wenige Situationen, in denen Sie eine der beiden verwenden können.
Der gleiche Wert kann der gleiche sein oder auch nicht. Verwenden Sie ==, um Ints zu vergleichen, es sei denn, Sie möchten die Identität für einen bestimmten Zweck überprüfen.
Das gleiche wie oben.
falsch. Da === in JavaScript ein Operator ist, der prüft, ob die Werte ohne Typkonvertierung gleich sind, prüfen wir, ob sie gleich sind. Python prüft, ob es dasselbe ist. Um in Python etwas Ähnliches zu tun, betrachten Sie beispielsweise "Typ (a) ist Typ (b) und a == b".
Recommended Posts