Ik kwam onlangs deze syntaxis tegen, ik ken het verschil niet.
Ik zou het op prijs stellen als iemand me het verschil zou kunnen vertellen.
Antwoord 1, autoriteit 100%
Het antwoord wordt hieruitgelegd.
Om te citeren:
Een klasse is gratis te implementeren
vergelijking op welke manier dan ook, en het
kan ervoor kiezen om een vergelijking te maken met
Geen betekent iets (wat eigenlijk
klinkt logisch; als iemand je dat zou zeggen
implementeer het object Geen van
krassen, hoe zou je het anders krijgen?
vergelijk True met zichzelf?).
Praktisch gesproken is er niet veel verschil, aangezien aangepaste vergelijkingsoperatoren zeldzaam zijn. Maar u moet als algemene regel is None
gebruiken.
Antwoord 2, autoriteit 50%
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
Antwoord 3, autoriteit 16%
In dit geval zijn ze hetzelfde. None
is een singleton-object (er bestaat maar één None
).
is
controleert of het object hetzelfde object is, terwijl == alleen controleert of ze equivalent zijn.
Bijvoorbeeld:
p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent
Maar aangezien er maar één None
is, zullen ze altijd hetzelfde zijn, en is
zal True retourneren.
p = None
q = None
p is q # True because they are both pointing to the same "None"
Antwoord 4, autoriteit 6%
Het hangt af van wat je vergelijkt met Geen. Sommige klassen hebben aangepaste vergelijkingsmethoden die == None
anders behandelen dan is None
.
In het bijzonder de uitvoer van a == None
hoeft niet eens booleaans te zijn!!– een veel voorkomende oorzaak van bugs.
Neem voor een specifiek voorbeeld een numpy-array waarbij de ==
vergelijking elementsgewijs wordt geïmplementeerd:
import numpy as np
a = np.zeros(3) # now a is array([0., 0., 0.])
a == None #compares elementwise, outputs array([False, False, False]), i.e. not boolean!!!
a is None #compares object to object, outputs False
Antwoord 5
Als je numpy gebruikt,
if np.zeros(3)==None: pass
geeft u een foutmelding wanneer numpy een elementgewijze vergelijking maakt