Melhores Práticas de Iteradores e Decorators
Diretrizes para iteração preguiçosa, higiene de decorators e pipelines composáveis - os padrões que mantêm os serviços Python seguros em memória e depuráveis.
Busque em todas as páginas da documentação
Diretrizes para iteração preguiçosa, higiene de decorators e pipelines composáveis - os padrões que mantêm os serviços Python seguros em memória e depuráveis.
lambda em loops e @wraps ausentes.itertools para chain, islice, groupby, product. Testados em batalha e preguiçosos.groupby quando agrupar por chave. O requisito de chave consecutiva é fácil de esquecer.tee ou list().try/finally ou @contextmanager dentro de geradores que detêm arquivos/sockets. Consumidores podem parar cedo..close() em testes quando a limpeza for importante. Dispara GeneratorExit no yield.yield from em vez de loops for/yield manuais. Delegação e propagação de retorno mais claras.islice ou condições de break. count() e cycle() nunca param sozinhos.@functools.wraps em funções wrapper. Preserva __name__, documentação e anotações.classmethod/staticmethod.def retry(n):). Evite configuração mutável global em decorators.from.lru_cache). Chame cache_clear quando as entradas mudarem externamente.maxsize em lru_cache para espaços de chave ilimitados. Previne vazamentos de memória.singledispatch para extensão aberta por tipo. Não longas cadeias isinstance em um módulo.partial para vincular configuração, não para ocultar parâmetros obrigatórios. Mantenha assinaturas públicas legíveis.with para arquivos, locks, transações de DB e configuração temporária. Não abra sem um caminho de fechamento.ExitStack quando o número de contextos for determinado em tempo de execução. Listas de arquivos dinâmicas, pilhas de plugins.False de __exit__ a menos que esteja deliberadamente suprimindo. Falhas ocultas corrompem o estado.@contextmanager para configuração/desmontagem simples com menos de 15 linhas. Baseado em classe para objetos reutilizáveis.with.Gerador quando o stream é grande ou de passagem única. Lista quando precisar de len, reutilização ou indexação.
Divida quando cada estágio tiver uma responsabilidade que mereça um nome - evite aninhamentos anônimos de 10 linhas.
Documente a ordem de empilhamento e a preservação de metadados - consumidores confiam em __name__ nos logs.
Cache por função; argumentos de método incluem self - considere uma função fora da classe ou __hash__ em self imutável.
Apenas quando precisar bifurcar uma passagem única - a memória cresce com a divergência.
Veja a seção asyncio - use async with para aquisição, async for para consumo.
list(pipeline(data)) em testes; afirme a limpeza intermediária com mocks em close.
Bom para folds raros; loop explícito geralmente é mais claro para equipes novas em estilo funcional.
Decorator para registro/metadados; herança para implementação de comportamento compartilhado.
Materializar listas intermediárias gigantes entre estágios de map/filter - permaneça preguiçoso até a fronteira.
Versões do Stack: 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: 19 de jul. de 2026