파이썬의 데코레이터

2042 단어 decoratorpython
파이썬에서 데코레이터를 배우기 전에 데코레이터가 무엇인지 일반적으로 확인합시다.

이름 자체에서 알 수 있듯이 데코레이터는 장식, 포장을 의미합니다. 테이블을 꾸미는 것은 꽃, 조명 등을 추가/배치하여 테이블을 더 아름답게 만드는 것을 의미합니다. 따라서 장식이란 기본적으로 다른 것을 추가/수정하여 사물을 다르게 보이게 하는 것을 의미합니다.

비슷한 방식으로 파이썬에서 데코레이터는 기능을 데코레이션하거나 래핑하는 것을 의미합니다. 실제 기능을 실행하기 전/후에 기능을 더 추가할 수 있습니다.

예를 들어 이것을 봅시다.

인수가 없는 데코레이터 예:




# Normal function
def add_num():
    return 2 + 3

# Decorator function
def decorator_func(fun):
    def wrapper():
        res_str = f'Sum of 2 + 3 is '
        re = fun()
        return res_str + str(re)
    return wrapper


일반 함수 호출:

add_num()


산출:5
데코레이터 함수 호출:

dec_result = decorator_func(add_num)
print(dec_result)


산출:Sum of 2 + 3 is 5
Decorator 함수에서 결과를 보다 명확하게 하기 위해 추가 문자열 값을 추가했습니다. 이런 식으로 데코레이터는 매우 유용합니다..

데코레이터 함수를 직접 호출하는 대신 아래와 같이 @ 기호를 사용하여 주석을 사용할 수 있습니다.

@decorator_func
def add_num():
    return 2 + 3


데코레이터 주석이 있는 일반 함수 호출:

dec_annot_call = add_num()
print(dec_annot_call)


아웃아웃:Sum of 2 + 3 is 5

인수가 있는 데코레이터의 예:



데코레이터 함수에 인수를 전달하려면 아래와 같이 키워드 arg params *args 및 *kwargs를 사용해야 합니다.

# Decorator function with arguments
def decorator_func(fun):
    def wrapper(*args, **kwargs):
        res_str = f'Sum of {args[0]} + {args[1]} is '
        re = fun(*args, **kwargs)
        return res_str + str(re)
    return wrapper

# Decorator annotations for normal function with args
@decorator_func
def add_num(arg1, arg2):
    return arg1 + arg2

# Calling with args
dec_annot_call = add_num(8, 9)
print(dec_annot_call)


산출:Sum of 8 + 9 is 17

좋은 웹페이지 즐겨찾기