variable - python is true




Python Nenhuma comparação: devo usar “is” ou==? (2)

Resumo:

Use is quando você deseja verificar a identidade de um objeto (por exemplo, verificando se var é None ). Use == quando você quiser verificar a igualdade (por exemplo, é var igual a 3 ?).

Explicação:

Você pode ter classes personalizadas onde my_var == None retornará True

por exemplo:

class Negator(object):
    def __eq__(self,other):
        return not other

thing = Negator()
print thing == None    #True
print thing is None    #False

is verificação da identidade do objeto. Existe apenas 1 objeto None , então quando você faz my_var is None , você está verificando se eles são realmente o mesmo objeto (não apenas objetos equivalentes )

Em outras palavras, == é uma verificação de equivalência (que é definida de objeto para objeto), enquanto que is verificada a identidade do objeto:

lst = [1,2,3]
lst == lst[:]  # This is True since the lists are "equivalent"
lst is lst[:]  # This is False since they're actually different objects

Duplicata Possível:
Quando o operador `==` não é equivalente ao operador `is`? (Python)

Eu estou usando o Python 2.x.

Meu editor me dá um sublinhado de 'aviso' quando eu comparo my_var == None , mas nenhum aviso quando eu uso my_var is None .

Eu fiz um teste no shell do Python e determinei que ambos são válidos, mas meu editor parece estar dizendo que my_var is None é o preferido.

É este o caso e, em caso afirmativo, por quê?


O PEP 8 define que é melhor usar o operador is ao comparar singletons.





nonetype