본문 바로가기
Python & Django

Python Decorator

by softserve 2021. 5. 24.
반응형

 

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 & Django' 카테고리의 다른 글

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

댓글