[PYTHON] 함수 데코레이터 활용 실습
2023. 9. 20. 18:37ㆍDATA PROGRAMMING/PYTHON
데코레이터(decorator)는 함수를 수정하지 않고 함수의 작동 방식에 변화를 주거나 특정 동작을 추가하는 역할을 한다. 기존 함수를 입력받아 이를 통해 새로운 함수 객체를 만들어 준다.
파이썬 함수 데코레이터
def decorate(func):
def wrapper():
print("함수 시작")
func()
print("함수 끝")
return wrapper
def hello():
print("hello")
say_hi = decorate(hello)
say_hi()
위 코드를 사용하면, hello()함수를 decorate() 함수의 인자로 대입할 수 있다.
이를 @decorate 기능을 통해 더 쉽게 실행할 수 있다.
def decorate(func):
def wrapper():
print("함수 시작")
func()
print("함수 끝")
return wrapper
@decorate
def hello():
print("hello")
hello()
decorate를 통해 hello()함수는 자동으로 decorate함수에 들어가고, hello()를 실행하면 아까와 같은 결과가 출력된다.
decorator는 마치 수학의 합성함수와 유사한 역할을 한다. 데코레이트 뒤에 정의된 함수를 데코레이트 전에 정의된 함수에 합성시키는 느낌이다.
우선 위 코드를 이해해보자. time.time() 함수는 현재 시스템 시간을 부르는 함수이다. 이를 start에 저장한다. 그리고 for 문을 활용하여 50개의 숫자를 출력한다. 마지막엔 다시 time.time()함수를 쓰고 start를 빼준다. 즉 마지막에 출력되는 값은 for문이 끝난 시점의 시스템 시각에서 for문 시작전에 실행한 시스템 시각을 빼주는 것이므로, for문의 작동 시간을 구하는 의미를 갖는다.
import time
def get_time(func):
def wrapper(*args, **kwargs):
# code here
start = time.time()
func()
return time.time() - start
#
return wrapper
@get_time
def for_loop(r=100000):
for i in range(r):
if i % 10000 == 0:
print(i)
return None
print(for_loop())
get_time이후 정의된 함수는 자동으로 get_time함수에 저장된다. 즉 for_loop함수의 실행시간이 얼마나 되는지 출력해 준다.
'DATA PROGRAMMING > PYTHON' 카테고리의 다른 글
[파이썬] matplotlib 라이브러리를 활용한 금융 데이터 시각화 (0) | 2023.10.04 |
---|---|
[PYTHON] yfinance를 활용하여 웹 상의 데이터 받아 분석하기 (0) | 2023.09.22 |
[PYTHON] 파이썬 프로그래머스 문제 풀기 1 - 자릿수 더하기 (0) | 2023.09.20 |
[파이썬] 대신증권 API를 활용한 알고리즘 개발 (0) | 2023.09.20 |
[파이썬] 대신증권 API를 통해 주식투자 하기 (0) | 2023.09.18 |