Python Nenhum

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:

NoneLinguagem de código:  Python  ( python )

Se você usar a type()função para verificar o tipo do Nonevalor, você obterá NoneTypea 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
TrueLinguagem 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:

TrueLinguagem 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 que False.
  • 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 = NoneLinguagem 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 colorsLinguagem 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 Nonepor 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 classe NoneType.
  • None não é igual a nada, exceto a si mesmo.
  • Use o operador is ou is not para comparar None com outros valores.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *