Decorator
728x90
데코레이터 (Decorator)
함수 앞뒤에 기능을 추가해서 손쉽게 함수를 활용할 수 있는 기법
혹시 다음과 같이 @가 사용된 파이썬 코드를 본 적이 있으신지?
@decorator_func
def function():
print("what is decorator?")
위 코드에서 @decorator_func 부분이 데코레이터임
def logger_login():
print("Dave login")
logger_login()
시간을 앞뒤로 추가하고 싶다.
이렇게 넣으면 됩니다.
import datetime
def logger_login():
print(datetime.datetime.now())
print("Dave login")
print(datetime.datetime.now())
logger_login()
똑같은 기능을 앞뒤로 가지고 있을때 중간의 기능이 바뀌는 많은 함수들을 만들어야 할때
직접 각 함수에 기능을 앞뒤로 코드로 넣어도 되긴 되지 않을까?
여러 함수에 동일한 기능을 @데코레이터 하나로 간편하게 추가할 수 있고,
예를 들어, 파라미터가 있는 함수에 파라미터의 유효성 검사가 필요할 때
파라미터가 있는 함수가 있을 때마다, 유효성 검사 코드를 넣기가 불편!
만약 유효성 검사 코드 수정이 필요하다면 관련 함수를 모두 수정해야 하므로 매우 불편
# 데코레이터 작성하기
def datetime_decorator(func): # <--- datetime_decorator 는 데코레이터 이름, func 가 이함수 안에 넣을 함수가 됨
def wrapper(): # <--- 호출할 함수를 감싸는 함수
print('time %s' % str(datetime.datetime.now())) # <--- 함수 앞에서 실행할 내용
func() # <--- 함수
print(datetime.datetime.now()) # <--- 함수 뒤에서 실행할 내용
return wrapper # <--- closure 함수로 만든다.
# 데코레이터 적용하기
# 쉽게 설명하면 데커레이터 함수의 parameter로 데커레이터 된 함수의 객체가 전달된다.
@datetime_decorator
def logger_login_david():
print('David login')
logger_login_david()
파라미터가 있는 함수에 Decorator 적용하기
중첩 함수에 꾸미고자 하는 함수와 동일하게 파라미터를 가져가면 됨
# 데코레이터
def outer_func(func):
def inner_func(digit1, digit2):
func(digit1, digit2)
if digit2 == 7:
print("행운!")
else:
print("미당첨 ㅠ")
return inner_func
@outer_func
def lucky(num1 ,num2):
print("이번주 번호는: %s, %s" % (num1, num2))
from random import choice
num_list = range(0, 10)
for i in range(10):
A = choice(num_list)
B = choice(num_list)
lucky(A, B)
728x90
'Python > python - pythonic' 카테고리의 다른 글
python - default 인자 와 doc string 을 사용한 동적인 에러처리 (0) | 2021.08.22 |
---|---|
데코레이터를 이해하기전 알아야 할것들 (0) | 2020.12.06 |
벡터 클래스의 부활 (0) | 2020.12.04 |
WeakValueDictionary 촌극 (0) | 2020.12.04 |
약한참조 (2) | 2020.12.02 |
댓글
이 글 공유하기
다른 글
-
python - default 인자 와 doc string 을 사용한 동적인 에러처리
python - default 인자 와 doc string 을 사용한 동적인 에러처리
2021.08.22 -
데코레이터를 이해하기전 알아야 할것들
데코레이터를 이해하기전 알아야 할것들
2020.12.06 -
벡터 클래스의 부활
벡터 클래스의 부활
2020.12.04 -
WeakValueDictionary 촌극
WeakValueDictionary 촌극
2020.12.04