> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 함수 데코레이터를 만들고 연결하는 방법은 무엇입니까?

Python에서 함수 데코레이터를 만들고 연결하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-24 19:47:15
원래의
797명이 탐색했습니다.

How to Create and Chain Function Decorators in Python?

함수 데코레이터를 만들고 함께 연결하는 방법

소개

Python의 데코레이터는 다음을 허용합니다. 함수 자체를 수정하지 않고 함수의 동작을 수정할 수 있습니다. 데코레이터를 사용하면 함수 호출 전후에 기능 추가, 입출력 확인, 기타 작업을 수행할 수 있습니다.

데코레이터 만들기

데코레이터를 만들려면 , 다른 함수를 인수로 취하는 함수를 정의합니다. 이 함수는 원래 함수를 래핑하는 새 함수를 반환해야 합니다.

def make_bold(fn):
    # The new function the decorator returns
    def wrapper():
        # Insertion of some code before and after
        return "<b>" + fn() + "</b>"
    return wrapper
로그인 후 복사

데코레이터 연결

데코레이터를 연결하여 함수에 여러 수정 사항을 적용할 수 있습니다. 아래와 같이 각 데코레이터를 차례로 적용하기만 하면 됩니다.

@make_bold
@make_italic
def say():
    return "hello"
로그인 후 복사

이 코드는 make_bold 데코레이터를 make_italic 데코레이터에 적용하고, 이는 차례로 say 함수에 적용됩니다. 결과적으로 say 함수는 굵은 이탤릭체로 표시된 문자열을 반환합니다.

예: 텍스트 형식을 지정하는 체인 데코레이터

텍스트 문자열. 텍스트에 굵게 및 기울임꼴 서식을 추가하려고 합니다. 이를 달성하기 위해 위에 정의된 데코레이터를 사용할 수 있습니다.

@make_bold
@make_italic
def formatted_text(text):
    return text

print(formatted_text("Hello world"))
로그인 후 복사

출력:

<b><i>Hello world</i></b>
로그인 후 복사

데코레이터에 인수 전달

인수를 다음으로 묶어 데코레이터에 인수를 전달할 수 있습니다. 괄호:

def a_decorator_passing_arguments(function_to_decorate):
    def a_wrapper_accepting_arguments(arg1, arg2):
        print("I got args! Look: {0}, {1}".format(arg1, arg2))
        function_to_decorate(arg1, arg2)
    return a_wrapper_accepting_arguments

@a_decorator_passing_arguments
def print_full_name(first_name, last_name):
    print("My name is {0} {1}".format(first_name, last_name))

print_full_name("Peter", "Venkman")
로그인 후 복사

출력:

I got args! Look: Peter, Venkman
My name is Peter Venkman
로그인 후 복사

결론

데코레이터를 생성하고 연결하는 방법을 이해함으로써, Python 함수의 기능을 확장할 수 있습니다. 이 강력한 기술을 사용하면 모듈식 및 재사용 가능한 방식으로 동작을 수정하고, 검사를 수행하고, 코드를 향상할 수 있습니다.

위 내용은 Python에서 함수 데코레이터를 만들고 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿