[Python] decorator 예제

Yerin·2019년 12월 8일
0

study-python

목록 보기
11/18
post-custom-banner

Decorator는 closure처럼 중첩함수를 리턴하는 함수 이며 다른 함수에 적용해서, 적용된 함수가 실행되기 전에 무조건 실행됩니다. 즉 특정 함수를 실행하기 전에 강제적으로 다른 함수가 먼저 실행된후 실행되도록 하는 강제성을 제공하는 기능입니다.

  • 예제

    greeting 함수에 적용될 decorator 함수를 구현하여 greeting 함수에 적용해주세요.
    Greeting 함수가 호출 되었을때 decorator 함수에 parametor 값이 greeting 함수 리턴값의 다음에 붙혀져서 리턴되어야 합니다. Decorator 함수의 이름은 name_decorator 여야 합니다.

예를 들어, 다음 처럼 정의 하여 name_decorator decorator에 "정우성"을 parameter로 적용하여 greeting을 호출하면:

@name_decorator("정우성")
def greeting():
    return "Hello, "

greeting()

결과값은 다음과 같아야 합니다.

"Hello, 정우성"

  • 예시답안
def name_decorator(param):
	def real_decorator(func):
    	def wrapper():
        	result = func() + param
            return result
        return wrapper
    return real_decorator
    
@name_decorator("이예린")
def greeting():
	return "Hello, "
    
greeting()
  

먼저, name_decorator 라는 함수를 만들고 데코레이터가 사용할 매개변수 param을 지정한다. 그리고 name_decorator 함수 안에 실제 데코레이터 역할을 할 real_decorator 함수를 만든다. 즉, 이 함수에서 호출할 함수를 매개변수로 받는다. 그다음에 real_decorator 안에 wrapper함수를 만들어준다.

wrapper 함수 안에서는 먼저 func의 결과를 확인한다. 그다음에 func의 반환값을 반환한다. 여기서는 real_decorator, wrapper 함수를 두 개 만들었으므로 함수를 만든 뒤에 return으로 두 함수를 반환해준다. 데코레이터를 사용할 때는 데코레이터에 ( )(괄호)를 붙인 뒤 인수를 넣어주면 된다.

ref: https://dojang.io/mod/page/view.php?id=2429

profile
졸꾸 !!!
post-custom-banner

0개의 댓글