Como Verificar se uma Variável é None em Python

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se uma variável é None em Python. O laboratório começa explicando o valor None, uma constante especial que representa a ausência de um valor. Você criará scripts Python para entender como None é retornado por funções quando nenhum valor está presente, como atribuir None a variáveis e como usar None como um argumento padrão em funções.

O laboratório então o guia através do uso do operador is para verificar especificamente por None, diferenciando-o de outros valores falsos (falsy values) como 0, False e strings vazias. Isso garante que você possa identificar com precisão quando uma variável realmente contém o valor None em seu código Python.

Entenda o Valor None

Nesta etapa, você aprenderá sobre o valor None em Python. None é uma constante especial em Python que representa a ausência de um valor ou um valor nulo. Ele é frequentemente usado para indicar que uma variável não recebeu um valor ou que uma função não retorna um valor.

Vamos começar criando um arquivo Python chamado none_example.py em seu diretório ~/project usando o editor VS Code.

## ~/project/none_example.py
def greet(name):
    if name:
        return "Hello, " + name
    else:
        return None

result = greet("Alice")
print(result)

result = greet("")
print(result)

Neste código:

  • Definimos uma função greet que recebe um name como entrada.
  • Se name não estiver vazio, a função retorna uma string de saudação.
  • Se name estiver vazio, a função retorna None.
  • Chamamos a função greet com "Alice" e uma string vazia "" e imprimimos os resultados.

Agora, execute o script Python:

python ~/project/none_example.py

Você deve ver a seguinte saída:

Hello, Alice
None

Como você pode ver, quando chamamos greet com "Alice", ela retorna "Hello, Alice". Quando a chamamos com uma string vazia, ela retorna None, que é então impresso no console.

None não é o mesmo que 0, False ou uma string vazia. É um valor distinto que representa a ausência de um valor.

Você pode atribuir None a uma variável:

## ~/project/none_example2.py
x = None
print(x)

Execute o script:

python ~/project/none_example2.py

Saída:

None

Você também pode usar None como um valor de argumento padrão em uma função:

## ~/project/none_example3.py
def my_function(arg=None):
    if arg is None:
        print("No argument was passed.")
    else:
        print("Argument:", arg)

my_function()
my_function("Hello")

Execute o script:

python ~/project/none_example3.py

Saída:

No argument was passed.
Argument: Hello

Neste exemplo, se nenhum argumento for fornecido ao chamar my_function, arg terá None como padrão.

Use o Operador 'is' para Verificar None

Nesta etapa, você aprenderá como usar o operador is para verificar se uma variável é None. Em Python, o operador is é usado para testar se duas variáveis se referem ao mesmo objeto na memória. Isso é diferente do operador ==, que verifica se duas variáveis têm o mesmo valor. Ao lidar com None, é uma boa prática usar o operador is porque None é um objeto singleton, o que significa que existe apenas uma instância de None na memória.

Vamos criar um arquivo Python chamado is_none_example.py em seu diretório ~/project usando o editor VS Code.

## ~/project/is_none_example.py
def check_none(value):
    if value is None:
        print("The value is None")
    else:
        print("The value is not None")

x = None
check_none(x)

y = "Hello"
check_none(y)

Neste código:

  • Definimos uma função check_none que recebe um value como entrada.
  • Usamos o operador is para verificar se value é None.
  • Se value é None, imprimimos "The value is None".
  • Caso contrário, imprimimos "The value is not None".
  • Chamamos a função check_none com None e "Hello" para demonstrar a diferença.

Agora, execute o script Python:

python ~/project/is_none_example.py

Você deve ver a seguinte saída:

The value is None
The value is not None

Como você pode ver, o operador is identifica corretamente quando uma variável é None.

É importante usar is None em vez de == None ao verificar None. Embora == None possa funcionar em alguns casos, não é garantido que funcione em todas as situações, especialmente ao lidar com objetos personalizados que substituem o operador ==. Usar is None é a maneira recomendada e mais confiável de verificar None.

Aqui está outro exemplo para ilustrar isso:

## ~/project/is_none_example2.py
class MyClass:
    def __eq__(self, other):
        return True  ## Always return True for equality

obj = MyClass()
print(obj == None)  ## Might return True due to the overridden __eq__ method
print(obj is None)  ## Always returns False because obj is not None

Execute o script:

python ~/project/is_none_example2.py

Saída:

True
False

Este exemplo mostra que usar == None pode levar a resultados inesperados se o método __eq__ do objeto for substituído. A verificação is None, no entanto, sempre identifica corretamente se o objeto é realmente None.

Diferencie None de Outros Valores Falsos

Nesta etapa, você aprenderá a diferenciar None de outros valores falsos em Python. Em Python, vários valores são considerados "falsos" (falsy), o que significa que eles são avaliados como False em um contexto booleano. Isso inclui False, 0, 0.0, strings vazias (""), listas vazias ([]), tuplas vazias (()), dicionários vazios ({}) e None.

É importante entender que, embora None seja falso, ele não é o mesmo que esses outros valores. Usar o operador is é crucial ao verificar especificamente None, pois ele distingue None de outros valores falsos.

Vamos criar um arquivo Python chamado falsy_values.py em seu diretório ~/project usando o editor VS Code.

## ~/project/falsy_values.py
def check_falsy(value):
    if value:
        print(f"{value!r} is considered True")
    else:
        print(f"{value!r} is considered False")

check_falsy(None)
check_falsy(False)
check_falsy(0)
check_falsy("")
check_falsy([])

print("\nChecking with 'is None':")

def check_none(value):
    if value is None:
        print(f"{value!r} is None")
    else:
        print(f"{value!r} is not None")

check_none(None)
check_none(False)
check_none(0)
check_none("")
check_none([])

Neste código:

  • Definimos uma função check_falsy que recebe um value como entrada e verifica sua veracidade em um contexto booleano.
  • Em seguida, definimos uma função check_none que usa o operador is None para verificar especificamente se o valor é None.
  • Chamamos ambas as funções com None, False, 0, "" e [] para demonstrar as diferenças.

Agora, execute o script Python:

python ~/project/falsy_values.py

Você deve ver a seguinte saída:

None is considered False
False is considered False
0 is considered False
'' is considered False
[] is considered False

Checking with 'is None':
None is None
False is not None
0 is not None
'' is not None
[] is not None

Esta saída mostra claramente que, embora todos os valores sejam considerados falsos em um contexto booleano, apenas None é identificado como None ao usar o operador is None.

Usar is None garante que você esteja verificando especificamente a ausência de um valor, em vez de apenas qualquer valor que seja avaliado como False. Essa distinção é importante para escrever código Python robusto e preciso.

Resumo

Neste laboratório, você aprendeu sobre o valor None em Python, que representa a ausência de um valor. Você viu como uma função pode retornar None quando um valor não está disponível e como atribuir None a uma variável.

Além disso, você explorou o uso de None como um valor de argumento padrão em uma função, permitindo que a função se comporte de maneira diferente quando nenhum argumento é fornecido. O laboratório demonstrou esses conceitos por meio de exemplos práticos e trechos de código.