데코레이터

Python으로 함수 작성하기

Shayne Miel

Software Architect @ Duo Security

함수

함수

Python으로 함수 작성하기

데코레이터

데코레이터가 있는 함수

Python으로 함수 작성하기

입력 수정

입력 수정

Python으로 함수 작성하기

출력 수정

출력 수정

Python으로 함수 작성하기

함수 수정

함수 수정

Python으로 함수 작성하기

데코레이터는 어떻게 생겼나요?

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

multiply(1, 5)
20
Python으로 함수 작성하기

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
Python으로 함수 작성하기

double_args 데코레이터

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

def double_args(func):
# 수정 가능한 새 함수를 정의합니다 def wrapper(a, b):
# 일단 원본 함수를 그대로 호출합니다 return func(a, b)
# 새 함수를 반환합니다 return wrapper
new_multiply = double_args(multiply)
new_multiply(1, 5)
5
Python으로 함수 작성하기

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
new_multiply = double_args(multiply)
new_multiply(1, 5)
20
Python으로 함수 작성하기

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>
Python으로 함수 작성하기

데코레이터 문법

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
Python으로 함수 작성하기

Passons à la pratique !

Python으로 함수 작성하기

Preparing Video For Download...