Decoradores

Escribir funciones en Python

Shayne Miel

Software Architect @ Duo Security

Funciones

función

Escribir funciones en Python

Decoradores

función con decorador

Escribir funciones en Python

Modificar entradas

modificar entradas

Escribir funciones en Python

Modificar salidas

modificar salidas

Escribir funciones en Python

Modificar función

modificar función

Escribir funciones en Python

¿Cómo es un decorador?

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

multiply(1, 5)
20
Escribir funciones en Python

El decorador 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
Escribir funciones en Python

El decorador double_args

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

def double_args(func):
# Define a new function that we can modify def wrapper(a, b):
# For now, just call the unmodified function return func(a, b)
# Return the new function return wrapper
new_multiply = double_args(multiply)
new_multiply(1, 5)
5
Escribir funciones en Python

El decorador double_args

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

def double_args(func): def wrapper(a, b):
# Call the passed in function, but double each argument return func(a * 2, b * 2)
return wrapper
new_multiply = double_args(multiply)
new_multiply(1, 5)
20
Escribir funciones en Python

El decorador 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>
Escribir funciones en Python

Sintaxis de decorador

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
Escribir funciones en Python

¡Vamos a practicar!

Escribir funciones en Python

Preparing Video For Download...