15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CAPÍTULO 6

Módulos nativos

Em se tratando de sua biblioteca-padrão, o Python é como aqueles produtos que

já vêm com tudo incluso, inclusive as pilhas. Muitas outras linguagens são

distribuídas com um número muito pequeno de pacotes comuns e obrigam o

pobre programador a varrer o mundo em busca daquela funcionalidade

importante que está faltando. Embora o Python ofereça um repositório fabuloso

de módulos criados pela comunidade, a linguagem tenta entregar, já na

instalação default, uma grande quantidade de módulos importantes para tornar a

linguagem útil e abrangente.

O conjunto completo de módulos-padrão é grande demais para ser abordado

num livro como este. Contudo, alguns desses módulos nativos são tão

entrelaçados com o Python básico que poderiam muito bem ser considerados

como parte da especificação da linguagem. Esses módulos nativos essenciais são

especialmente importantes quando estamos escrevendo as partes mais

intrincadas e propensas a erros de nossos programas.

Item 42: Defina decoradores de função com

functools.wraps

O Python possui uma sintaxe especial para definir decoradores (decorators, em

inglês) que podem ser aplicados a funções. Os decoradores permitem executar

código adicional antes e depois das chamadas às funções que eles envolvem, o

que por sua vez permite acessar e modificar os argumentos de entrada e os

valores de retorno. Essa funcionalidade pode ser bastante útil para forçar

semântica, depurar erros, registrar funções e muito mais.

Por exemplo, digamos que se queira mostrar no console os argumentos e valores

de retorno da chamada a uma função. Isso é especialmente útil quando estamos

depurando uma pilha de chamada a funções em uma função recursiva. No

exemplo de código a seguir, definimos um decorador como esse:

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!