build my life

[Python] 데코레이터(Decorator) 본문

Python

[Python] 데코레이터(Decorator)

dalovee 2022. 8. 9. 17:27
728x90

데코레이터(Decorator)

  • 장식하다, 꾸미다의 의미에 맞게 함수를 장식하고 꾸미는 함수
  • 코드를 변경하지 않고 기능을 추가하거나 수정하고 싶을 때 정의하여 사용
  • 내부함수 주소를 반환하는 클로져와 비슷하고 함수가 인자로 전달됨
def decorator_func(org_func):
	
    def wrapper_func():
    	print("org_func 실행 전")
        org_func()
        
    return wrapper_func

def do_func():
	print("org_func 실행")

result = decorator_func(do_func) #result에 wrapper_func의 주소값이 전달된다.
result() #wrapper_func 실행

# output
org_func 실행 전
org_func 실행

 

  • 데코레이터의 파라미터는 몇개의 어떤 자료가 들어올 지 모르기 때문에 가변 파라미터로 정의한다.
  • 위와 같이 데코레이터로 함수를 꾸며주는 방법이 있지만 더 간단하게 꾸며주고 싶은 함수 위에 다가 @데코레이터명을 적어줌으로써 꾸며줄 수 있다.
def decorator_func(org_func):
    def wrapper_func(*args, **kwargs):
        print("콜백함수가 실행되기 전입니다.")
        result = org_func(*args, **kwargs)
        print("콜백함수가 실행완료 되었습니다.")
        return result
    return wrapper_func

@decorator_func
def do_func(a, b):
    return a + b

do_func(3,5)

#output
콜백함수가 실행되기 전입니다.
콜백함수가 실행완료 되었습니다.
8

 


어렵다 어렵다 어렵다.....ㅠㅠㅜ

728x90

'Python' 카테고리의 다른 글

[Python] 상속  (0) 2022.08.09
[Python] 클래스  (0) 2022.08.09
[Python] 클로저(Closure)와 콜백함수(Callback)  (0) 2022.08.08
[Python] 람다 함수(lambda)  (0) 2022.08.08
[Python] 함수  (0) 2022.08.08