Python for the last Jedi episode I - Tchelinux Caxias do Sul 2018 - Joelmir Ribacki
1. Python for the last Jedi
Episode I
Joelmir Ribacki
ribacki@devgrid.co.uk
2. Decoradores de Função e closures
● O que são decorator
● Entendendo escopo de variáveis
● Entendendo closure
● Variáveis nonlocal
● Memoização com functools.lru_cache
3. Decorador
Um decorador é um callable que aceita uma função como argumento (a função
decorada) e retorna um objeto invocável.
● Pode realizar algum processamento com a função decorada e devolve-la.
● Pode substituir por um objeto invocável (outra função).
12. Closure
É uma função com escopo estendido, que engloba variáveis não globais
referenciadas no corpo da função que não estão definidas ali.
São importantes somente quando se tem funções aninhadas
14. Closure
Calcular uma média em evolução usando função de ordem superior
- averager,series é uma free variable, não tem associação ao escopo local
15. Closure
Show your face mate!
● Closure é uma função que preserva a associação com as variáveis livres
existentes quando a função é definida, permitido o uso delas quando o
escopo não está mais disponível.
18. Closure - nonlocal
Somente é possível atualizar uma free variable, caso ela for um objeto
mutável. Para objetos imutáveis (números, strings, tuplas … ) só é possível ler,
pois quando tentar atualizar vai estar criando uma nova variável local e não
utilizando a mesma.
Para contorno deste problema, nonlocal foi introduzido no python3, ela
permite sinalizar uma variável livre, mesmo que receba um novo valor na função.
Dessa forma a associação mantida na closure será alterada.
20. Memoização com functools.lru_cache
functools.lru_cache é um decorator que implementa a momoização utilizando
a técnica de salvar resultados de chamadas prévias de uma função custosa,
evitando repetir processamento em argumentos usados anteriormente.
O LRU ( Least Recently Used ) usa um cache descartando entradas que não
foram lidas recentemente.