파이썬 @ (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 라는 함수를 정의했는데 중첩함수를 사용하고 있다. 중첩 함수에 대해 알고 싶으면 아래 링크를 참조하길 바란다.
파이썬 함수 안에 중첩(nested)해서 함수 넣기
함수 안에 함수 중첩해서 넣기 예제와 특징 예제1 코드>> def a_func(): def b_func(): print("it's b_func") print("it's a_func") b_func() a_func() # b_func() #주석처리 결과>> it's a_func it's b_func 예제..
scribblinganything.tistory.com
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 |