Especifique o Tipo Desejado
Nesta etapa, exploraremos como especificar o tipo desejado para variáveis e argumentos de função, e como impor esses tipos usando type hints (dicas de tipo) e verificações condicionais. Embora o Python seja de tipagem dinâmica, as type hints permitem que você adicione informações de tipo estático ao seu código, que podem ser usadas por verificadores de tipo como mypy para detectar erros de tipo antes do tempo de execução.
Type hints são anotações que especificam o tipo esperado de uma variável, argumento de função ou valor de retorno de função. Elas são escritas usando a sintaxe : para variáveis e argumentos, e a sintaxe -> para valores de retorno.
Vamos começar adicionando type hints ao nosso exemplo anterior.
-
Abra o editor VS Code no ambiente LabEx.
-
Crie um novo arquivo chamado type_hints.py no diretório ~/project.
~/project/type_hints.py
-
Adicione o seguinte código a type_hints.py:
def add_numbers(x: int, y: int) -> int:
"""Adds two numbers together."""
return x + y
## Example usage
result: int = add_numbers(5, 3)
print(f"Result: {result}")
## Example with incorrect types
## This will not raise an error at runtime, but a type checker will flag it
## result: int = add_numbers("5", "3")
## print(f"Result: {result}")
Neste script:
x: int e y: int especificam que os argumentos x e y devem ser inteiros.
-> int especifica que a função add_numbers deve retornar um inteiro.
result: int especifica que a variável result deve ser um inteiro.
-
Execute o script usando o comando python no terminal:
python ~/project/type_hints.py
Você deve ver uma saída semelhante à seguinte:
Result: 8
O script é executado sem erros porque os tipos estão corretos. No entanto, se você descomentar as linhas com tipos incorretos, o script ainda será executado, mas um verificador de tipo como mypy sinalizaria essas linhas como erros de tipo.
Para instalar e executar mypy, você pode usar os seguintes comandos:
pip install mypy
mypy ~/project/type_hints.py
Como pip não está pré-configurado, você pode encontrar erros relacionados a pacotes ausentes ou versões incorretas. Para o propósito deste laboratório, focaremos em demonstrar o conceito de type hints e verificações condicionais.
Outra maneira de impor tipos é usar verificações condicionais dentro do seu código. Isso permite que você levante exceções se os tipos não forem o que você espera.
def divide_numbers(x, y):
if not isinstance(x, (int, float)):
raise TypeError("x must be a number")
if not isinstance(y, (int, float)):
raise TypeError("y must be a number")
if y == 0:
raise ValueError("y cannot be zero")
return x / y
## Example usage
result = divide_numbers(10, 2)
print(f"Result: {result}")
## Example with incorrect types
## This will raise a TypeError
## result = divide_numbers("10", 2)
## print(f"Result: {result}")
Neste exemplo, usamos isinstance() para verificar se x e y são números (sejam int ou float). Se não forem, levantamos um TypeError. Também verificamos se y é zero e levantamos um ValueError se for.
Ao combinar type hints e verificações condicionais, você pode escrever um código Python mais robusto e de fácil manutenção, que é menos propenso a erros de tipo.