Não está claro se esta pergunta é sobre isvs ==, ou sobre a natureza do que exatamente Noneé e como o comportamento difere em ambos os contextos (este último é o motivo pelo qual acabei aqui). Com base na imprecisão e falta de respostas do OP ... Estou surpreso que isso tenha muitos votos positivos. Quero dizer ... vamos lá ... a pergunta nem está escrita na pergunta real ...
Uma classe é livre para implementar a comparação da maneira que escolher, e pode optar por fazer a comparação com None significa alguma coisa (o que realmente faz sentido; se alguém lhe disser para implementar o objeto None a partir do zero, de que outra forma você poderia comparar True contra si mesmo?).
Na prática, não há muita diferença, pois os operadores de comparação personalizados são raros. Mas você deve usar is Nonecomo regra geral.
@ myusuf3 Você realmente não precisa de uma prova para isso. isé, basicamente, comparação de números inteiros, enquanto ==não está apenas resolvendo referências, mas comparando valores que podem ter tipos incompatíveis.
Pijusn
4
Um a favor de "é". Quando uma variável pode ser None ou algo que não tem comparação significativa com None. Por exemplo, uma variável pode ser um numpy.array ou None (meu caso particular).
Jblasco # 14/14
3
Gostaria de acrescentar ao que @TimLudwinski está dizendo: primeiro, se alguém optar por substituir o operador de igualdade para tornar None um caso especial, por que gostaríamos de dizer o contrário? Segundo, "deve haver uma - e preferencialmente apenas uma - maneira óbvia de fazê-lo". E a maneira óbvia de verificar se algo é igual a algo é, bem, o operador de igualdade.
Esta resposta não está correta, conforme explicado na resposta de Ben Hoffstein abaixo stackoverflow.com/questions/3257919/is-none-vs-none/… . x == Nonepode avaliar até Truemesmo se xnão for Nonesenão uma instância de alguma classe com seu próprio operador de igualdade personalizado.
max
5
Se você usa numpy,
if np.zeros(3)==None:pass
dará erro quando o numpy fizer uma comparação elementar
Depende do que você está comparando com Nenhum. Algumas classes têm métodos de comparação personalizados que tratam de maneira == Nonediferente is None.
Em particular, a saída de a == Nonenem precisa ser booleana !! - uma causa frequente de bugs.
Para um exemplo específico, ==use uma matriz numpy em que a comparação é implementada por elementos:
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 isNone#compares object to object, outputs False
==
eis
em python?is
vs==
, ou sobre a natureza do que exatamenteNone
é e como o comportamento difere em ambos os contextos (este último é o motivo pelo qual acabei aqui). Com base na imprecisão e falta de respostas do OP ... Estou surpreso que isso tenha muitos votos positivos. Quero dizer ... vamos lá ... a pergunta nem está escrita na pergunta real ...Respostas:
A resposta é explicada aqui .
Citar:
Na prática, não há muita diferença, pois os operadores de comparação personalizados são raros. Mas você deve usar
is None
como regra geral.fonte
is None
é um pouco (~ 50%) mais rapidamente do que== None
:)is
é, basicamente, comparação de números inteiros, enquanto==
não está apenas resolvendo referências, mas comparando valores que podem ter tipos incompatíveis.fonte
Nesse caso, eles são os mesmos.
None
é um objeto singleton (existe apenas umNone
).is
verifica se o objeto é o mesmo objeto, enquanto == apenas verifica se são equivalentes.Por exemplo:
Mas como existe apenas um
None
, eles sempre serão os mesmos eis
retornarão Verdadeiro.fonte
x == None
pode avaliar atéTrue
mesmo sex
não forNone
senão uma instância de alguma classe com seu próprio operador de igualdade personalizado.Se você usa numpy,
dará erro quando o numpy fizer uma comparação elementar
fonte
Depende do que você está comparando com Nenhum. Algumas classes têm métodos de comparação personalizados que tratam de maneira
== None
diferenteis None
.Em particular, a saída de
a == None
nem precisa ser booleana !! - uma causa frequente de bugs.Para um exemplo específico,
==
use uma matriz numpy em que a comparação é implementada por elementos:fonte