매번 함수가 실행되기전에 무언가 체크해야되는경우 데코레이터를 쓰면 편하다from collections import defaultdict session = defaultdict() def check_session(user_key): if user_key in session: return True return False def yes_session(): print('hello') if check_session(user_key): yes_session()
from collections import defaultdict session = defaultdict() def check_session(user_key): if user_key in session: return True return False def yes_session(): print('hello') if check_session(user_key): yes_session()
다음과 같이 유저키를 통해 세션에 유저키가 있는지 체크하는 코드가 있을때, 세션에 키가 존재하는지 검사하는 코드를 데코레이터를 이용해서 만들어보자from collections import defaultdict session = defaultdict() def check_session(user_key): if user_key in session: return True return False def session_deco(func): def wrapper(*args, **kwargs): if user_key in session: func(*args, **kwargs) return wrapper @session_deco def yes_session(): print('hello') yes_session()
데코레이터
from collections import defaultdict session = defaultdict() def check_session(user_key): if user_key in session: return True return False def session_deco(func): def wrapper(*args, **kwargs): if user_key in session: func(*args, **kwargs) return wrapper @session_deco def yes_session(): print('hello') yes_session()
매번 함수의 실행전, 후의 시간을 측정하는 경우도 데코레이터를 사용할 수 있다.import time def timer_deco(func): def wrapper(*args, **kwargs): t1 = time.time() func(*args, **kwargs) t2 = time.time() dt = t2 - t1 print('{} 함수가 실행되는데 걸린 시간: {}'.format(func.__name__,dt)) return wrapper @timer_deco def test_func(): for i in range(10000): print(i)
import time def timer_deco(func): def wrapper(*args, **kwargs): t1 = time.time() func(*args, **kwargs) t2 = time.time() dt = t2 - t1 print('{} 함수가 실행되는데 걸린 시간: {}'.format(func.__name__,dt)) return wrapper @timer_deco def test_func(): for i in range(10000): print(i)