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.

fibonacci(n)

Return the n-th Fibonacci number

Chamar o atributo help é apenas um exemplo de como os decoradores podem

causar problemas bastante sutis. As funções do Python têm muitos outros

atributos-padrão (por exemplo, __name__, __module__) que devem ser

preservados para manter funcionando a interface das funções na linguagem. Ao

usar wraps, garantimos que o comportamento será sempre correto.

Lembre-se

• Os decoradores são a sintaxe oficial do Python para permitir que uma função

modifique outra em tempo de execução.

• Usar decoradores pode provocar comportamento errático em ferramentas que

fazem introspecção, como os depuradores (debuggers).

• Use o decorador wraps, disponível no módulo nativo functools, quando

definir seus próprios decoradores, evitando assim diversos problemas.

Item 43: Considere os comandos contextlib e with

para um comportamento reutilizável de try/finally

No Python, o comando with é usado para indicar quando algum código está

rodando em um contexto especial. Por exemplo, travas de exclusão mútua, ou

mutex (consulte o Item 38: “Use Lock para evitar que as threads iniciem

condições de corrida nos dados”), podem ser usadas com comandos with para

indicar que o código indentado só pode ser executado quando a trava estiver em

ação.

lock = Lock()

with lock:

print('Lock is held')

O exemplo anterior é equivalente a uma construção try/finally porque a classe

Lock ativa, de forma apropriada, o comando with.

lock.acquire()

try:

print('Lock is held')

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!