반응형
파이썬 @ (Decorator) 사용예제와 방법
#골뱅이 마크 사용 예시
@wraps(f)
@app.route
@login_required
@templated()
Python flask를 사용하다 보면 위 코드와 같이 Decorator로 이루어진 구문이 있는데 동작 방식은 알지만 실제 "at" 기호가 앞에 붙을때 어떻게 움직이는지는 잘 몰라 조사하게 되었다.
def a_func(b_func):
print("a_func")
def c_func():
print("b_func")
b_func()
return c_func
@a_func
def d_func():
print("d_func")
print("############")
d_func()
>>결과
a_func
############
b_func
d_func
위 코드는 파이썬에서 데코레이터(decorator)를 이용하는 기본 예제이다.
a_func 라는 함수를 정의했는데 중첩함수를 사용하고 있다. 중첩 함수에 대해 알고 싶으면 아래 링크를 참조하길 바란다.
a_func는 인자로 함수를 받고 받은 함수는 내부 c_func 함수에서 실행된다. 그리고 c_func 는 return이 되어 return 받은 값을 실행하기 전까지는 실행이 되지 않는다.
@a_func 의 의미는 그 아래 정의된 함수를 a_func 의 인자값으로 넣겠다는 의미이다. 즉, 여기서는 d_func() 함수가 a_func로 들어간다. @a_func를 실행함으로써 print("a_func")는 먼저 실행되고 c_func는 return 되어서 d_func 를 실행하여야지 실행 된다.
이처럼 어떤 함수를 실행시킬때 반복되는 작업을 데코레이터(골뱅이) 표시를 사용하여 진행 한다.
def a_func(count):
def b_func(c_func):
print("{} 번째 카운트입니다".format(count))
print("b_func")
def d_func():
print("d_func")
c_func()
return c_func
return b_func
@a_func(2)
def e_func():
print("e_func")
print("############")
e_func()
결과>>
2 번째 카운트입니다
b_func
############
e_func
위와 같이 데코래이터에 인자 값을 보내서 사용할 수 도 있다. 이때 return 이 2번 사용되었다. 이를 고려해서 코드를 작성해야 한다.
반응형
'파이썬(Python) > 문법' 카테고리의 다른 글
파이썬 폴더위치에 따른 import 방법 (상위,하위,동일 폴더 위치)을 예제로 이해하기 (0) | 2021.05.22 |
---|---|
파이썬 *args, **kwargs 의미와 예제를 통해 이해하기 (0) | 2021.04.24 |
파이썬 함수 안에 중첩(nested)해서 함수 넣기 (0) | 2021.04.21 |
파이썬(Python) 속성 중 __name__ 이란? (0) | 2021.04.15 |
JSON 개념, 의미, 사용 목적, Python Flask 와의 연동 예제 설명 (3) | 2021.01.13 |