Decorators

Viết hàm trong Python

Shayne Miel

Software Architect @ Duo Security

Functions

function

Viết hàm trong Python

Decorators

function with decorator

Viết hàm trong Python

Modify inputs

modify inputs

Viết hàm trong Python

Modify outputs

modify outputs

Viết hàm trong Python

Modify function

modify function

Viết hàm trong Python

What does a decorator look like?

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

multiply(1, 5)
20
Viết hàm trong Python

The 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
Viết hàm trong Python

The 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
Viết hàm trong Python

The 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
Viết hàm trong Python

The 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>
Viết hàm trong Python

Decorator 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
Viết hàm trong Python

Let's practice!

Viết hàm trong Python

Preparing Video For Download...