티스토리 뷰

Programing language/Python

Python decorator

내일도이렇게 2019. 5. 1. 15:23

 

decorator 는 어떠한 함수를 다른 함수가 실행되기 전에 자동으로 먼저 실행될 수 있도록 해주는 문법이다.

주로 공통적으로 항상 먼저 실행되어야 하는 코드가 있을 때 사용하게 된다. 

 

from functools import wraps # 1

def test_decorator(f): ## 2
    @wraps(f)          ## 3
    def decorated_function(*args,**kwargs): ## 4
        print("Decorated Function")
        return f(*args,**kwargs) ## 5

    return decorated_function  ## 6

@test_decorator     ## 7
def func():   ## 8
    print("Calling func function")

 

1. functools 모듈의 wraps decorator 함수를 임포트한다. 

2. decorator 함수를 정의한다. decorator 함수는 함수를 인자로 받아서 함수를 리턴하는 함수이다. 

  여기서 f 라고 이름 지어진 함수를 인자로 받는다. 이 f 함수는 해당 decorator 함수가 적용되는 함수가 된다. 

 

3. wraps decorator 함수를 적용한다. 꼭 적용해야만 하는건 아니지만 부차적으로 생기는 이슈들을 해결해 준다. 

4. decorator 함수다. decorator 함수를 리턴해야 줘야 하므로 nested 함수로 지정해 준다.

   함수 인자를 *args 와 **kwargs 로 인자로 지정해서 모든 형태의 인자를 받을 수 있도록 한다. 

 

5.  f 함수를 실행시켜 리턴해 준다. 즉 해당 decorator 함수가 실행되고 난 후에

   decorator 가 적용된 함수를 호출해 주는 것 

6. decorator 함수를 리턴해 준다. 

7. 2 에서 만든 decorator 함수를 8의 함수에 적용해 준다. 

8. 2 에서 만든 decorator 함수가 적용되는 함수다. 

 

 

실행하면 이와같이 나온다. 

 

 

 

Reference 

  깔끔한 파이썬 탄탄한 백엔드 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함