Tipos Genéricos Integrados e de Coleção
O Python moderno usa genéricos de coleção integrados (list[int]) e tipos abstratos de collections.abc para descrever contêineres com precisão - tanto para leitores quanto para mypy/pyright.
Busque em todas as páginas da documentação
O Python moderno usa genéricos de coleção integrados (list[int]) e tipos abstratos de collections.abc para descrever contêineres com precisão - tanto para leitores quanto para mypy/pyright.
from collections.abc import Iterable, Mapping, Sequence
def total_lengths(names: Sequence[str]) -> int:
return sum(len(n) for n in names)
def merge(base: Mapping[str, int], extra: Mapping[str, int]) -> dict[str, int]:
return {**base, **extra}Quando usar isso:
from collections.abc import Callable, Iterable, Iterator, Mapping
def index_by(items: Iterable[dict], key: str) -> dict[str, dict]:
result: dict[str, dict] = {}
for item in items:
result[str(item[key])] = item
return result
def batch(iterator: Iterator[int], size: int) -> Iterable[list[int]]:
batch_items: list[int] = []
for value in iterator:
batch_items.append(value)
if len(batch_items) == size:
yield batch_items
batch_items = []
if batch_items:
yield batch_items
def apply_all(fns: Mapping[str, Callable[[], None]]) -> None:
for fn in fns.values():
fn()
if __name__ == "__main__":
rows = [{"id": "1", "name": "Ada"}, {"id": "2", "name": "Linus"}]
print(index_by(rows, "id"))O que isso demonstra:
Iterable aceita listas, geradores e iteradores personalizadosIterator é de passagem única - o verificador avisa se for reutilizado incorretamente no modo estritoMapping documenta dicionários somente leitura sem métodos de mutaçãoCallable[[], None] tipa funções de efeito colateral sem argumentoslist[int]).list[Dog] não é list[Animal]).isinstance em tempo de execução e alvos de tipagem estrutural.collections.abc em anotações (3.9+).dict[str, list[int]] para listas de adjacência.| Aceita | Quando |
|---|---|
Sequence | Necessita de indexação + len |
Iterable | Passagem única para frente |
Mapping | Pesquisa de chave somente leitura |
MutableMapping | Necessita de setitem/delitem |
# lista invariante - use Sequence para parâmetro somente leitura
def print_all(items: Sequence[str]) -> None:
for item in items:
print(item)typing.List depreciado no 3.9+. Correção: list[int].dict[str, int] não é compatível com dict[str, float] em variância estrita. Correção: Use união de valores ou Mapping.dict[str, Any] perde a segurança. Correção: TypedDict ou modelo Pydantic.tuple[int, ...] para comprimento variável homogêneo vs fixo tuple[int, str].| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
TypedDict | Chaves de string conhecidas | Apenas chaves dinâmicas |
| Modelo Pydantic | JSON aninhado validado | Núcleo numérico interno |
TypeAlias | Alias aninhado complexo | Simples list[int] |
numpy.ndarray | Tensores numéricos | Contêineres Python gerais |
Tipo de parâmetro Sequence quando você apenas lê/indexa; list quando o chamador deve passar especificamente uma lista mutável.
Iterable produz um iterador via iter(). Iterator é esgotado após uma passagem.
Mapping sinaliza API somente leitura; dict quando a função muta ou retorna um dict concreto.
set[str] para conjuntos homogêneos - invariante como list.
frozenset[str] igual a set para fins de tipagem.
Iterator[T] ou Iterable[T] - Iterator tem semântica de passagem única mais estrita.
bytes para binário; memoryview raramente em APIs públicas - use tipos do protocolo Buffer em tipagem avançada.
dict[str, object] é flexível; TypedDict ou modelos para segurança real.
collections.abc.Callable é preferível em anotações 3.9+.
Sequence[T] - sem append no contrato de tipo, embora a lista em tempo de execução ainda seja mutável.
Versões da Pilha: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026