Decorators

Como escrever funções em Python

Shayne Miel

Software Architect @ Duo Security

Funções

função

Como escrever funções em Python

Decorators

função com decorator

Como escrever funções em Python

Modificar entradas

modificar entradas

Como escrever funções em Python

Modificar saídas

modificar saídas

Como escrever funções em Python

Modificar função

modificar função

Como escrever funções em Python

Como é um decorator?

@double_args
def multiply(a, b):
  return a * b

multiply(1, 5)
20
Como escrever funções em Python

O decorator double_args

def multiply(a, b):
  return a * b

def double_args(func): return func
new_multiply = double_args(multiply)
new_multiply(1, 5)
5
multiply(1, 5)
5
Como escrever funções em Python

O decorator double_args

def multiply(a, b):
  return a * b

def double_args(func):
# Defina uma nova função que podemos modificar def wrapper(a, b):
# Por enquanto, só chame a função original return func(a, b)
# Retorne a nova função return wrapper
new_multiply = double_args(multiply)
new_multiply(1, 5)
5
Como escrever funções em Python

O decorator double_args

def multiply(a, b):
  return a * b

def double_args(func): def wrapper(a, b):
# Chame a função recebida, mas dobre cada argumento return func(a * 2, b * 2)
return wrapper
new_multiply = double_args(multiply)
new_multiply(1, 5)
20
Como escrever funções em Python

O decorator double_args

def multiply(a, b):
  return a * b

def double_args(func): def wrapper(a, b): return func(a * 2, b * 2) return wrapper
multiply = double_args(multiply)
multiply(1, 5)
20
multiply.__closure__[0].cell_contents
<function multiply at 0x7f0060c9e620>
Como escrever funções em Python

Sintaxe de decorator

def double_args(func):
  def wrapper(a, b):
    return func(a * 2, b * 2)
  return wrapper

def multiply(a, b): return a * b multiply = double_args(multiply) multiply(1, 5)
20
def double_args(func):
  def wrapper(a, b):
    return func(a * 2, b * 2)
  return wrapper

@double_args def multiply(a, b): return a * b multiply(1, 5)
20
Como escrever funções em Python

Vamos praticar!

Como escrever funções em Python

Preparing Video For Download...