# Anotações de tipo em Python
> [!NOTE] Anotações de tipo em Python
> As anotações de tipo (ou _type hints_) em [[Linguagem de programação Python|Python]] são uma funcionalidade introduzida na PEP 484 que permite indicar os tipos esperados para variáveis, parâmetros de função e valores de retorno. Embora o Python seja uma linguagem de tipagem dinâmica, as anotações de tipo não alteram o comportamento em tempo de execução, mas servem como metadados valiosos para ferramentas de análise estática, IDEs e, principalmente, para a legibilidade e manutenção do código.
:: **Referência** :: [typing — Suporte a dicas de tipo — Documentação do Python 3.11.2](https://docs.python.org/3/library/typing.html)
# Por que usar Anotações de Tipo?
O uso de anotações de tipo oferece diversos benefícios:
1. **Melhora a Legibilidade e Documentação:** Deixa claro qual tipo de dado uma função espera e retorna, ou qual tipo uma variável deve conter, funcionando como uma forma de documentação viva.
2. **Auxílio em IDEs:** Ambientes de Desenvolvimento Integrado (IDEs) como VS Code, PyCharm e outros podem usar essas anotações para oferecer autocompletar mais preciso, refatoração mais segura e detecção de erros em tempo de desenvolvimento.
3. **Análise Estática de Código:** Ferramentas como o Mypy podem verificar o código sem executá-lo, identificando potenciais erros de tipo antes mesmo de o programa rodar.
4. **Refatoração Mais Segura:** Ao alterar o código, as anotações de tipo ajudam a garantir que as mudanças não introduzam incompatibilidades de tipo em outras partes do sistema.
5. **Facilita a Colaboração:** Em projetos de equipe, as anotações de tipo padronizam a forma como os dados são esperados e manipulados, reduzindo mal-entendidos.
# Exemplos
Anotações de tipo em [[Linguagem de programação Python|Python]] permitem identificar um tipo de dado para uma dada variável a fim de facilitar a compreensão do que está sendo executado. Como exemplo, temos:
```python
def greeting(name: str) -> str:
return 'Hello ' + name
```
Assim, sabemos que a função `greeting` recebe uma variável chamada `name` com dados do tipo string e retorna uma variável do tipo string.
Você também pode usar tipos de dados para estruturas como:
```python
typing.Set(set, MutableSet[T])
typing.Counter(collections.Counter, Dict[T, int])
typing.Deque(_deque, MutableSequence[T]_)
```
```python
from typing import List, Dict, Tuple, Set
numeros: List[int] = [1, 2, 3, 4]
configuracoes: Dict[str, str] = {"tema": "dark", "idioma": "pt-br"}
coordenadas: Tuple[float, float] = (10.5, 20.3)
nomes_unicos: Set[str] = {"Ana", "Bruno", "Carlos"}
```
:: **Referência** :: [typing — Suporte a dicas de tipo — Documentação do Python 3.11.2](https://docs.python.org/3/library/typing.html)
:: **PEP 484** :: [Type Hints](https://www.python.org/dev/peps/pep-0484/)
:: **PEP 526** :: [Syntax for Variable Annotations](https://www.python.org/dev/peps/pep-0526/)
:: **PEP 585** :: [Type Hinting Generics In Standard Collections](https://www.python.org/dev/peps/pep-0585/) (para `list[int]` etc.)