> 백엔드 개발 > 파이썬 튜토리얼 > Python 데코레이터 이해: 심층 분석

Python 데코레이터 이해: 심층 분석

Barbara Streisand
풀어 주다: 2024-10-30 08:22:28
원래의
449명이 탐색했습니다.

Python 데코레이터는 함수나 메서드의 동작을 수정하거나 향상시킬 수 있는 강력한 도구입니다. 일반적인 사용 사례에는 로깅, 승인 등이 포함됩니다.
그러나 데코레이터를 정의하라는 요청을 받으면 많은 사람들은

이라고 말할 것입니다.

함수에 대한 래퍼입니다.

이는 기술적으로는 정확하지만 내부적으로는 훨씬 더 많은 일이 일어나고 있습니다.

간단한 데코레이터 분석
간단한 예를 살펴보겠습니다.

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Before calling the function")
        result = func(*args, **kwargs)
        print("After calling the function")
        return result
    return wrapper

@my_decorator
def say_hello(name):
    print(f"Hello, {name}!")
로그인 후 복사

여기서 my_designator는 say_hello 함수의 데코레이터입니다. say_hello가 정의되면 자동으로 my_ decorator에 전달되어 함수 호출을 다음과 같이 변환합니다.
say_hello = 내_장식자(say_hello)

이 변화는 언제 발생합니까?
이 변환은 코드 컴파일 중에 특히 실행 시간이 아닌 함수 정의 시간에 발생합니다.

코드 분해
데코레이터가 하위 수준에서 작동하는 방식을 이해하기 위해 dis 모듈을 사용하여 데코레이팅된 함수의 바이트코드를 검사할 수 있습니다.

import dis

@my_decorator
def say_hello(name):
    print(f"Hello, {name}!")

dis.dis(say_hello)
로그인 후 복사

바이트코드 분석

dis.dis(say_hello)의 출력은 다음과 같습니다.

Understanding Python Decorators: A Deep Dive
바이트코드 설명

  1. 함수 호출 전

    • LOAD_GLOBAL: 인쇄 기능을 로드합니다.
    • LOAD_CONST: '함수 호출 전' 메시지를 로드합니다.
    • CALL_FUNCTION: 인쇄를 호출합니다.
    • POP_TOP: 반환 값을 버립니다.
  2. 원래 함수 호출

    • LOAD_DEREF: 클로저에 의해 캡처된 원래 함수(func)를 로드합니다.
    • LOAD_FAST: 위치 및 키워드 인수를 로드합니다.
    • BUILD_MAP: 키워드 인수에 대한 새 사전을 생성합니다.
    • CALL_FUNCTION_EX: 인수를 사용하여 원래 함수를 호출합니다.
    • STORE_FAST: 결과를 로컬 변수에 저장합니다.
  3. 함수 호출 후

    • 첫 번째 부분과 유사하게 print를 호출하여 '함수 호출 후'를 출력합니다.
    • 결과 반환
    • 결과 변수를 로드하여 반환합니다.

결론
Python 데코레이터는 단순한 함수 래퍼 그 이상입니다. 이를 통해 정의 시 함수 동작을 수정할 수 있습니다. 데코레이터의 작동 방식을 이해하고 바이트코드를 검토함으로써 프로젝트에서 데코레이터를 보다 효과적으로 사용할 수 있습니다.

지금은 여기까지입니다! 제가 더 자세히 알아보고 싶은 내용이 있으면 알려주세요!

위 내용은 Python 데코레이터 이해: 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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