Il existe de nombreux langages qui ont ce concept, pas seulement Python. Prenons Python comme exemple.
Le mot «même» a deux significations. «Même» et «même valeur».
Que voulez-vous dire? La plupart des gens penseront que MM. A et B vivent ensemble. En d'autres termes, M. A et M. B vivent dans la «même» maison.
Que voulez-vous dire? Je pense que peu de gens pensent que M. A et M. B portent «les mêmes» vêtements, c'est-à-dire que deux personnes portent un seul vêtement. Il est naturel de penser que M. A et M. B portent respectivement des vêtements et que les vêtements que porte M. A et les vêtements que porte M. B sont, par exemple, des vêtements du même fabricant et du même dessin. est.
Peut-être que les choses elles-mêmes sont différentes, mais dans un certain sens, elles peuvent être appelées les mêmes. Ces relations sont appelées équivalence ou équivalence.
Soit dit en passant, si ce n'est pas une chose simple comme un entier mais une chose compliquée comme des vêtements, vous devez penser à ce qui est considéré comme une «valeur égale». Si la taille des vêtements est également incluse dans la condition, si M. A et M. B ont des tailles différentes, peu importe leur similitude, ils ne seront pas considérés comme les mêmes. Si vous n'incluez pas la taille des vêtements dans l'état, si vous êtes commis à l'habillement et que le client dit "Parce que c'est un produit défectueux, remplacez-le par le même prix!", Vous pouvez apporter une taille différente. Peut être.
De plus, si vous l'écrivez, dans de nombreux cas, s'il est «identique», ce sera «valeur égale». Cependant, ce n'est pas toujours le cas, car cela dépend de ce qui est considéré comme «égal».
M. B est-il en sécurité?
Si M. A et M. B étaient dans la même voiture, M. B ne serait pas en sécurité non plus. Même si M. A et M. B sont dans la même voiture (du même modèle), s'ils ne sont pas dans la même voiture, M. B n'a rien à voir avec cela.
L'élément a-t-il été supprimé de la liste des variables b?
Si la variable a et la variable b sont identiques, l'élément a également été supprimé de la liste de b. Même si la variable a et la variable b ont la même valeur, si elles ne sont pas identiques, la liste de b est conservée.
De cette manière, «même» et «valeur égale» sont des concepts similaires et différents, mais en général, la même valeur est utilisée plus souvent que la même valeur. La distinction entre identique et équivalent est souvent requise lorsque la comparaison porte sur un objet mutable tel qu'une liste. Dans un système de traitement comme Python qui alloue de la mémoire hors de la vue du programmeur, il est rarement nécessaire de se demander si des objets immuables pointent réellement vers le même objet. Par conséquent, est rarement utilisé pour les objets immuables.
En Python, l'opérateur qui vérifie l'identité est est et l'opérateur qui vérifie l'égalité est ==. De plus, l'opérateur qui vérifie les valeurs non identiques ne l'est pas, et l'opérateur pour vérifier les valeurs non égales est! =.
Les opérateurs ==,! = Peuvent être surchargés par des noms de méthode spéciaux. (Autrement dit, vous pouvez définir comment comparer l'équivalence en créant une méthode avec un nom spécial.) Les opérateurs qui vérifient l'identité ne peuvent pas être surchargés.
En Python2, il existe deux types de noms de méthodes spéciales qui surchargent == (mais depuis Python 2.1). En Python3, l'un a été aboli et est devenu un type.
Les noms de méthodes spéciales qui peuvent être utilisés à la fois dans Python 2 (mais Python 2.1 ou supérieur) et 3 sont __eq__ (self, other)
correspondant à == et __ne__ (self, other)
correspondant à! =. ..
Si vous souhaitez le créer à l'avenir, n'hésitez pas à l'utiliser si vous ne prévoyez pas de l'exécuter sur Python 2.1 ou une version antérieure.
Voici un exemple de code.
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 #Même si les propriétaires sont différents, ils sont considérés comme la même voiture
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
De plus, la méthode spéciale __cmp__ (self, other)
qui ne peut être utilisée qu'en Python2 est un opérateur qui définit six opérateurs <, <=, == ,! =,> =,> À la fois, et__cmp__ (self Si, autre) ʻest négatif, cela signifie <, s'il vaut 0, cela signifie ==, et s'il est positif, cela signifie>. Je ne le recommande pas du tout car il ne peut pas être utilisé dans 3, mais il semble que int soit implémenté dans
cmp` même dans la série Python 2.7, donc je vais l'introduire juste au cas où.
C'est une jambe de serpent. Avec la nouvelle méthode, pour implémenter la comparaison de magnitude, vous devez définir __ne__
, __lt__
, __le__
, __ge__
, __gt__
en plus de __eq__
, mais Python 2.7 Dans les versions suivantes et 3, en utilisant functools.total_ordering, __eq ___
et __lt__
, __le__
Si vous définissez l'un de, __ge__
, __gt__
, le reste sera fait pour vous.
Le type à virgule flottante nan (pas un nombre) n'est pas la même valeur par comparaison. Par conséquent, même si vous le comparez avec vous-même, ce ne sera pas la même valeur.
nan = float("nan")
print(nan is nan) # ==> True
print(nan == nan) # ==> False
Si ==, comme mentionné ci-dessus, l'utilisateur peut l'implémenter comme il le souhaite, donc dans certains cas, des exceptions telles que TypeError et AttributeError peuvent apparaître, True peut être retourné même si ce n'est pas None, et le traitement peut être lourd. Hmm. Cependant, si vous comparez avec is, vous pouvez certainement comparer si la valeur est None ou non. Cependant, c'est parce qu'il est [garanti par les spécifications du langage] qu'il n'y a qu'un seul objet avec la valeur None (http://docs.python.jp/2/reference/datamodel.html#types). Tu peux le faire. Cette utilisation est source de problèmes lorsqu'il peut y avoir plusieurs objets avec la même valeur.
Fondamentalement, c'est plus rapide. Cependant, il existe peu de situations où vous pouvez utiliser l'un ou l'autre.
La même valeur peut être identique ou non. Utilisez == pour comparer les entiers, sauf si vous souhaitez vérifier l'identité dans un but particulier.
Comme ci-dessus.
faux. Puisque === en JavaScript est un opérateur qui vérifie si les valeurs sont les mêmes sans conversion de type, nous vérifions si elles sont identiques. Python vérifie qu'il est le même.
Pour faire quelque chose de similaire en Python, considérez, par exemple, type (a) est type (b) et a == b
.
Recommended Posts