Décorateurs

Écrire des fonctions en Python

Shayne Miel

Software Architect @ Duo Security

Fonctions

fonction

Écrire des fonctions en Python

Décorateurs

fonction avec décorateur

Écrire des fonctions en Python

Modifier les entrées

modifier les entrées

Écrire des fonctions en Python

Modifier les sorties

modifier les sorties

Écrire des fonctions en Python

Modifier la fonction

modifier la fonction

Écrire des fonctions en Python

À quoi ressemble un décorateur ?

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

multiply(1, 5)
20
Écrire des fonctions en Python

Le décorateur 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
Écrire des fonctions en Python

Le décorateur 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
Écrire des fonctions en Python

Le décorateur 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
Écrire des fonctions en Python

Le décorateur 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>
Écrire des fonctions en Python

Syntaxe des décorateurs

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
Écrire des fonctions en Python

Passons à la pratique !

Écrire des fonctions en Python

Preparing Video For Download...