Recentemente ho sono imbattuto in questa sintassi, non sono a conoscenza della differenza.Qual è la differenza tra "è Nessuno" e "== Nessuno"
Sarei grato se qualcuno potesse dire la differenza.
Recentemente ho sono imbattuto in questa sintassi, non sono a conoscenza della differenza.Qual è la differenza tra "è Nessuno" e "== Nessuno"
Sarei grato se qualcuno potesse dire la differenza.
La risposta è spiegata here.
Per citare:
Una classe è libera di implementare confronto alcun modo sceglie, e può scegliere di fare il confronto contro Nessuno significa qualcosa (che in realtà ha un senso, se qualcuno ti ha detto al implementare l'oggetto Nessuno dal zero, in quale altro modo si potrebbe farlo confronto vero contro se stesso?).
In pratica, non c'è molta differenza dal momento che gli operatori di confronto personalizzato sono rari. Ma dovresti usare is None
come regola generale.
Questa è stata una lettura interessante (e breve). E alcune informazioni utili su 'is' v.' == '. –
Inoltre, 'è None' è un bit (~ 50%) più veloce di' == None' :) –
@NasBanov hai un link a dove lo hai letto? – myusuf3
In questo caso, essi sono uguali. None
è un oggetto singleton (esiste sempre solo uno None
).
is
controlla se l'oggetto è lo stesso oggetto, mentre == controlla solo se sono equivalenti.
Ad esempio:
p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent
Ma dal momento che solo una None
c'è, saranno sempre gli stessi, e is
restituirà true.
p = None
q = None
p is q # True because they are both pointing to the same "None"
Questa risposta non è corretta, come spiegato nella risposta di Ben Hoffstein sotto http://stackoverflow.com/questions/3257919/is-none-vs-none/3257957#3257957. 'x == None' può valutare 'True' anche se' x' non è 'None' ma un'istanza di qualche classe con il proprio operatore di uguaglianza personalizzato. – max
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
Se si utilizza NumPy,
if np.zeros(3)==None: pass
vi darà errore quando NumPy fa confronto elementwise
Sede [C'è una differenza tra il '==' e 'is' in Python?] (http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python/134659#134659) –
@ myusuf3: si potrebbe desiderare di pensare di cambiare la risposta accettata al correggi uno. – max