Resumo : neste tutorial, você aprenderá sobre o valor None
do Python e como usá-lo corretamente em seu código.
Introdução ao valor None do Python
Em Python, None
é um objeto especial da classe NoneType
. Para usar o valor None
, especifique o seguinte:
None
Linguagem de código: Python ( python )
Se você usar a type()
função para verificar o tipo do None
valor, você obterá NoneType
a classe:
print(type(None))
Linguagem de código: Python ( python )
Saída:
<class 'NoneType'>
Linguagem de código: Python ( python )
O None
é um objeto singleton da classe NoneType
. Isso significa que Python cria um e apenas um objeto None
em tempo de execução.
Portanto, se você usar a igualdade (==
) ou o operador is
para comparar None
com None
, obterá o resultado de True
:
print(None == None)
print(None is None)
Linguagem de código: Python ( python )
Saída:
True
True
Linguagem de código: Python ( python )
É uma boa prática usar o operador is
ou is not
para comparar um valor com None
.
A razão é que os objetos definidos pelo usuário podem alterar o comportamento do operador de igualdade, substituindo o método __eq__()
. Por exemplo:
class Apple:
def __eq__(self, other):
return True
apple = Apple()
print(apple == None)
Linguagem de código: Python ( python )
Saída:
True
Linguagem de código: Python ( python )
Observe que você não pode substituir o comportamento do operador is
como faz com o operador de igualdade (==
).
Também é importante observar que o objeto None possui os seguintes recursos:
None
não é zero (0, 0,0,…).None
não é o mesmo queFalse
.None
não é o mesmo que uma string vazia (''
).- Comparar
None
com qualquer valor retornaráFalse
exceto ele mesmo.
As aplicações do objeto Python None
Vejamos alguns exemplos práticos de utilização do objeto None
.
1) Usando None do Python como valor inicial para uma variável
Quando uma variável não possui nenhum valor inicial significativo, você pode atribuir None
a ela, assim:
state = None
Linguagem de código: Python ( python )
Então você pode verificar se a variável recebeu um valor None
ou não, verificando-a da seguinte maneira:
if state is None:
state = 'start'
Linguagem de código: Python ( python )
2) Usando o objeto Python None para corrigir o problema do argumento padrão mutável
A função a seguir anexa uma cor a uma lista:
def append(color, colors=[]):
colors.append(color)
return colors
Linguagem de código: Python ( python )
Funciona conforme o esperado se você passar uma lista existente:
colors = ['red', 'green']
append('blue', colors)
print(colors)
Linguagem de código: Python ( python )
Saída:
['red', 'green', 'blue']
Linguagem de código: Python ( python )
No entanto, o problema surge quando você usa o valor padrão do segundo parâmetro. Por exemplo:
hsl = append('hue')
print(hsl)
rgb = append('red')
print(rgb)
Linguagem de código: Python ( python )
Saída:
['hue']
['hue', 'red']
Linguagem de código: Python ( python )
O problema é que a função cria a lista uma vez definida e usa a mesma lista em cada chamada sucessiva.
Para corrigir esse problema, você pode usar o valor None
como parâmetro padrão da seguinte maneira:
def append(color, colors=None):
if colors is None:
colors = []
colors.append(color)
return colors
hsl = append('hue')
print(hsl)
rgb = append('red')
print(rgb)
Linguagem de código: Python ( python )
Saída:
['hue']
['red']
Linguagem de código: Python ( python )
3) Usando o objeto Python None como valor de retorno de uma função
Quando uma função não possui um valor de retorno, ela retorna None
por padrão. Por exemplo:
def say(something):
print(something)
result = say('Hello')
print(result)
Linguagem de código: Python ( python )
A função say()
não retorna nada; portanto, ele retorna None
.
Resumo
None
é um objeto singleton da classeNoneType
.None
não é igual a nada, exceto a si mesmo.- Use o operador
is
ouis not
para compararNone
com outros valores.