Decorators

Functies schrijven in Python

Shayne Miel

Software Architect @ Duo Security

Functies

functie

Functies schrijven in Python

Decorators

functie met decorator

Functies schrijven in Python

Inputs aanpassen

inputs aanpassen

Functies schrijven in Python

Outputs aanpassen

outputs aanpassen

Functies schrijven in Python

Functie aanpassen

functie aanpassen

Functies schrijven in Python

Hoe ziet een decorator eruit?

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

multiply(1, 5)
20
Functies schrijven in Python

De double_args-decorator

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
Functies schrijven in Python

De double_args-decorator

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
Functies schrijven in Python

De double_args-decorator

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
Functies schrijven in Python

De double_args-decorator

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>
Functies schrijven in Python

Decorator-syntaxis

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
Functies schrijven in Python

Laten we oefenen!

Functies schrijven in Python

Preparing Video For Download...