공부/Python
[파이썬 기초] 데코레이터
mariabeetle
2017. 10. 3. 03:25
1. 데코레이터(Decorator)
- 함수에 부가 기능을 추가할 수 있다.
- 데코레이터를 정의할 때 함수 오브젝트를 반환하도록 정의해야 한다. 따라서 데코레이터를 정의할 때 함수A안에 함수B를 정의하고 함수 B의 오브젝트를 반환하도록 구현해야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # 실행 시간을 측정하는 데코레이터 import time def time_log(func): def wrapper(*args, **kwargs): #전처리 import datetime start = datetime.datettime.today() print("----start", func.__name__) #함수 실행 result = func(*args, **kwargs) #후처리 end = datetime.datetime.today() delta = end - start print("----end", func.__name__, delta, "sec") return wrapper @time_log def test1(): print("sleep 1sec") time.sleep(1) test1() | cs |
2. 언제 사용할까?
- 데코레이터를 사용하면 어느 함수를 언제 몇 번 호출했는지 알아볼 수 있어서 프로그램의 로그를 표시할 때 사용하면 편하다.
- 특정 사이트에서 데이터를 가져올 때 이미 데이터를 가져온 상태라면 캐시에서 가져오고, 캐시가 없으면 사이트에서 데이터를 가져오는 기능을 갖춘 데코레이터를 만들 수 있다.
- 함수에 들어온 인수값에 대한 검증 역시 데코레이터로 해결할 수 있다.