Dekoratoren

Funktionen in Python schreiben

Shayne Miel

Software Architect @ Duo Security

Funktionen

function

Funktionen in Python schreiben

Dekoratoren

Funktion mit Dekorator

Funktionen in Python schreiben

Eingaben ändern

Eingaben ändern

Funktionen in Python schreiben

Ausgaben ändern

Ausgaben ändern

Funktionen in Python schreiben

Funktion ändern

Funktion ändern

Funktionen in Python schreiben

Wie sieht ein Dekorator aus?

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

multiply(1, 5)
20
Funktionen in Python schreiben

Der double_args-Dekorator

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
Funktionen in Python schreiben

Der double_args-Dekorator

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
Funktionen in Python schreiben

Der double_args-Dekorator

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
Funktionen in Python schreiben

Der double_args-Dekorator

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>
Funktionen in Python schreiben

Dekorator-Syntax

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
Funktionen in Python schreiben

Lass uns üben!

Funktionen in Python schreiben

Preparing Video For Download...