Décorateurs

Écrire des fonctions en Python

Shayne Miel

Software Architect @ Duo Security

Fonctions

function

Écrire des fonctions en Python

Décorateurs

function with decorator

Écrire des fonctions en Python

Modifier les entrées

modify inputs

Écrire des fonctions en Python

Modifier les sorties

modify outputs

Écrire des fonctions en Python

Modifier la fonction

modify function

É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 du décorateur

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...