Da trilha de Python Este conceito ainda não saiu como card do dia. ir para o card de hoje

Python Tipos Intermediário

Type hints

Type hints são anotações opcionais que indicam os tipos esperados de variáveis, parâmetros e retornos de funções. Elas não são verificadas em tempo de execução pelo interpretador Python, mas servem como documentação viva e permitem que ferramentas como mypy façam análise estática, apontando erros antes de rodar o código.

Desde o Python 3.10, podemos usar a sintaxe de união com |, por exemplo int | None, que substitui Optional[int] de forma mais limpa. Para coleções genéricas, usamos list[int], dict[str, float], etc., indicando os tipos dos elementos internos.

Ferramentas como mypy leem esses hints e verificam a consistência do código. Elas ajudam a evitar bugs comuns, como passar None para uma função que espera str, ou esquecer de tratar um retorno opcional. O custo é baixo: basta anotar e rodar mypy arquivo.py.

Neste card, vamos explorar anotações básicas, uniões com |, genéricos com TypeVar e como integrar o mypy no fluxo de desenvolvimento.

Pontos-chave

  • Type hints são anotações opcionais que documentam tipos e permitem verificação estática.
  • A partir do Python 3.10, int | None é a forma idiomática de representar união com None.
  • Genéricos permitem criar funções e classes que funcionam com vários tipos mantendo a segurança.
  • mypy é a ferramenta padrão para checar type hints estaticamente.
  • Anotações não afetam a execução, mas melhoram a legibilidade e a manutenção.
type_hints_exemplo.py
from typing import TypeVar

T = TypeVar('T')

def soma(a: int, b: int) -> int:
    return a + b

def primeiro_elemento(lista: list[T]) -> T | None:
    return lista[0] if lista else None

def processa_nome(nome: str | None) -> str:
    if nome is None:
        return "Anônimo"
    return nome.upper()

if __name__ == "__main__":
    print(soma(2, 3))
    print(primeiro_elemento([10, 20, 30]))
    print(primeiro_elemento([]))
    print(processa_nome("maria"))
    print(processa_nome(None))

Exercícios

  1. 1
    Fácil

    Anotando uma função simples

    Escreva uma função dobro que recebe um número inteiro e retorna seu dobro. Anote os tipos dos parâmetros e do retorno. Depois, chame a função e imprima o resultado.

    Resolver
  2. 2
    Médio

    União com pipe e Optional

    Crie uma função formata_idade que recebe um int | None e retorna uma str. Se a idade for None, retorne "Idade não informada"; caso contrário, retorne "Idade: X anos". Use a sintaxe de união com |.

    Resolver
  3. 3
    Desafio

    Função genérica com TypeVar e mypy

    Implemente uma função genérica primeiro_ou_padrao que recebe uma lista de qualquer tipo T e um valor padrão do mesmo tipo T. Se a lista não estiver vazia, retorna o primeiro elemento; caso contrário, retorna o valor padrão. Use TypeVar para expressar o genérico e anote corretamente. Depois, teste com listas de inteiros e strings.

    Resolver

Continue estudando