Programming

; develop a program

Back-End/Python

[Python] 데코레이터(Decorator)

Clloud_ 2022. 10. 5. 12:07
반응형

이번 포스팅에서는 파이썬의 데코레이터(Decorator)에 대하여 공부를 해보고자 한다.

 


데코레이터(Decorator)

데코레이터는 기존 함수를 매개변수로 받아 새롭게 변형된 함수로 바꾸어 반환하는 함수를 말한다.

기존 함수 코드를 고치지 않고 기능을 추가하는 것이 목적이다.

 

 

데코레이터의 기본 구조

매개변수: func - core 로직을 처리하는 함수
core 로직을 처리하는 함수 전후로 특정 작업을 처리하고 싶은 경우
local 함수 - core 로직 처리 함수 전/후처리 작업을 추가한 함수를 정의

def decorator(func):

    def wrapper():
        print(func.__name__ + "함수 호출 전")
        func()
        print(func.__name__ + "함수 호출 후")
    return wrapper

호출 시

1. decorator( )의 매개변수로 hello_word 함수를 넣어 호출한다.
2. decorator( )가 반환한 wrapper( ) 함수가 실행된다.

@decorator
def hello_world():
    print("안녕하세요")

@decorator의 의미
ex) hello_world = decorator(hello_world)

 


매개변수가 있는 함수에 대한 decorator 정의

매개변수가 있는 경우

 wrapper( ) 함수에 원본 함수와 동일한 개수의 매개변수를 선언한다.

 

반환 값이 있는 경우

wrapper 에서 반환한 값이 호출 한 곳에 반환된다.

 

예제

decorator를 구현한다.

def percent_decorator(func):

    def wrapper(name, age):  # core 함수에 전달할 매개변수는 wrapper에 선언.
        print('%' * 30)  # 전처리
        func(name, age)
        print('%' * 30)  # 후처리

    return wrapper

decorator를 호출한다.

@percent_decorator
def greeting(name, age):
    print(f"{age}세의 {name}님 안녕하세요.")

[실행결과]

greeting('손흥민', 30)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
30세의 손흥민님 안녕하세요.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 


반응형

'Back-End > Python' 카테고리의 다른 글

[Python] load( ) & dumps( )  (0) 2023.06.02
[Python] 람다 방식(lambda)  (0) 2023.05.31
[Python] Local(지역) 함수  (2) 2022.10.05
[Python] Generator(제너레이터)  (0) 2022.10.04
[Python] Iterator(반복자)  (0) 2022.10.04