Decoratori

Scrierea funcțiilor în Python

Shayne Miel

Software Architect @ Duo Security

Funcții

funcție

Scrierea funcțiilor în Python

Decoratori

funcție cu decorator

Scrierea funcțiilor în Python

Modificarea intrărilor

modificare intrări

Scrierea funcțiilor în Python

Modificarea ieșirilor

modificare ieșiri

Scrierea funcțiilor în Python

Modificarea funcției

modificare funcție

Scrierea funcțiilor în Python

Cum arată un decorator?

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

multiply(1, 5)
20
Scrierea funcțiilor în Python

Decoratorul 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
Scrierea funcțiilor în Python

Decoratorul 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
Scrierea funcțiilor în Python

Decoratorul 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
Scrierea funcțiilor în Python

Decoratorul 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>
Scrierea funcțiilor în Python

Sintaxa decoratorului

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
Scrierea funcțiilor în Python

Să exersăm!

Scrierea funcțiilor în Python

Preparing Video For Download...