반응형
python에서는 함수를 인자로 주고 받을 수 있다.
따라서 인자로 받은 함수에 기능을 추가하거나 수정하여 새로운 함수를 만드는 것도 가능하다.
def announce(f): # announce는 함수 f를 입력받아서 wrapper를 반환한다.
def wrapper(): # wrapper는 함수 f의 실행 전후에 메시지를 출력한다.
print(f"{f.__name__} will be operated soon...") # __name__은 함수의 이름을 나타낸다
f()
print(f"{f.__name__} terminated")
return wrapper
이제 hello()를 작성하여 announce 함수에 넣어준 뒤 반환된 wrapper를 new_hello로 저장한다.
new_hello()를 실행하면 hello world가 출력되기 전후에 메시지가 나오는 것을 확인할 수 있다.
def hello():
print("Hello, world!")
new_hello = announce(hello)
new_hello()
이를 decorator를 이용해 구현하면 다음과 같다.
@announce # decorator
def hello():
print("Hello, world!")
hello()
함수를 조작하는 함수(announce) 앞에 @을 붙인 뒤 새로운 함수(hello)를 정의함으로써 데코레이터를 적용하면
announce()에 hello()를 넣어서 나온 결과물을 new_hello()에 저장하는 과정을 생략할 수 있다.
반응형
'Python & Data' 카테고리의 다른 글
Django 시작하기 (0) | 2021.06.16 |
---|---|
python 매개변수의 기본값 (0) | 2021.06.07 |
Python 함수를 간략히 나타내는 lambda 형식 (0) | 2021.05.23 |
Python 함수, 예외처리, 클래스 (0) | 2021.05.22 |
Python의 기본 자료구조 (0) | 2021.05.22 |
댓글