> 백엔드 개발 > 파이썬 튜토리얼 > 파이썬의 데코레이터는 무엇입니까? 하나를 어떻게 만드나요?

파이썬의 데코레이터는 무엇입니까? 하나를 어떻게 만드나요?

James Robert Taylor
풀어 주다: 2025-03-19 11:54:34
원래의
464명이 탐색했습니다.

파이썬의 데코레이터는 무엇입니까? 하나를 어떻게 만드나요?

파이썬의 데코레이터는 소스 코드를 직접 변경하지 않고 기능 또는 클래스의 동작을 수정하거나 향상시키는 강력하고 우아한 방법입니다. 그것들은 본질적으로 다른 기능을 인수로 취하고 행동을 확장하거나 변경하는 기능입니다. 데코레이터를 사용하면 랩핑 된 기능이 실행되기 전후에 코드를 실행하기 위해 다른 함수를 랩핑 할 수 있습니다.

데코레이터를 만들려면 다음을 따라갈 수 있습니다.

  1. 데코레이터 함수 정의 : 다른 함수를 인수로 취하는 함수를 작성하십시오.
  2. 래퍼 함수 정의 : 데코레이터 함수 내부에서 원래 함수를 감싸는 래퍼 함수를 ​​정의하십시오.
  3. 랩핑 된 함수 실행 : 래퍼 함수는 원래 함수를 호출해야하며 통화 전후에 추가 코드를 실행할 수도 있습니다.
  4. 래퍼 반환 : 데코레이터 함수는 래퍼 함수를 ​​반환해야합니다.

간단한 데코레이터를 만드는 방법의 예는 다음과 같습니다.

 <code class="python">def my_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello()</code>
로그인 후 복사

이 예에서 my_decorator 는 데코레이터이고 say_hello 장식하는 기능입니다. say_hello 호출되면 wrapper 함수 내에서 코드가 실행됩니다.

데코레이터는 파이썬 프로그래밍에서 어떤 이점을 제공합니까?

데코레이터는 파이썬 프로그래밍에서 몇 가지 주요 이점을 제공합니다.

  1. 코드 재사용 성 : 데코레이터를 사용하면 코드를 반복하지 않고 동일한 수정 또는 향상을 여러 기능에 적용 할 수 있습니다. 이것은 건조 (자신을 반복하지 말) 원리를 촉진합니다.
  2. 우려 사항 분리 : 기능의 핵심 논리를 추가 기능 (로깅, 타이밍 또는 인증 등)에서 분리하여 깨끗하고 집중된 코드를 유지하는 데 도움이됩니다.
  3. 유지 보수의 용이성 : 데코레이터는 기능에 외부로 적용되므로 장식 된 기능을 변경하지 않고 데코레이터를 수정할 수있어 유지 보수가 더 쉬워집니다.
  4. 유연성 및 확장 성 : 데코레이터를 쌓을 수 있으며 (동일한 기능에 다중 데코레이터를 적용) 매개 변수화되어 매우 유연한 향상을 가능하게 할 수 있습니다.
  5. 가독성과 단순성 : @decorator 구문은 명확하고 간결하여 코드를 쉽게 읽고 이해할 수 있도록합니다.
  6. 측면 지향 프로그래밍 : 데코레이터는 여러 기능에 공통적 인 로깅, 성능 모니터링 및 보안 점검과 같은 교차 절단 문제의 구현을 용이하게합니다.

데코레이터를 사용하여 기능의 동작을 수정할 수 있습니까?

데코레이터는 다양한 방식으로 기능의 동작을 수정하는 데 사용될 수 있습니다. 몇 가지 일반적인 응용 프로그램은 다음과 같습니다.

  1. 로깅 : 데코레이터는 디버깅 및 모니터링 목적으로 기능 호출, 입력, 출력 및 실행 시간을 기록 할 수 있습니다.

     <code class="python">def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__}") result = func(*args, **kwargs) print(f"{func.__name__} finished execution") return result return wrapper @log_decorator def add(a, b): return ab</code>
    로그인 후 복사
  2. 타이밍 : 데코레이터를 사용하여 기능의 실행 시간을 측정 할 수 있으며, 이는 성능 최적화에 유용합니다.

     <code class="python">import time def timer_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"{func.__name__} took {end_time - start_time} seconds to run.") return result return wrapper @timer_decorator def slow_function(): time.sleep(2) print("Slow function executed")</code>
    로그인 후 복사
  3. 인증 및 승인 : 데코레이터를 사용하여 특정 기능에 액세스하기 전에 사용자가 인증되어 있는지 확인할 수 있습니다.

     <code class="python">def requires_auth(func): def wrapper(*args, **kwargs): if not authenticated: raise PermissionError("Authentication required") return func(*args, **kwargs) return wrapper @requires_auth def protected_function(): print("This function is protected")</code>
    로그인 후 복사
  4. Memoization : 데코레이터는 성능을 향상시키기 위해 고가의 기능 호출 결과를 캐시 할 수 있습니다.

     <code class="python">def memoize(func): cache = {} def wrapper(*args): if args in cache: return cache[args] result = func(*args) cache[args] = result return result return wrapper @memoize def fibonacci(n): if n </code>
    로그인 후 복사

파이썬에서 데코레이터를 구현하는 실질적인 예를 설명 할 수 있습니까?

캐싱 결과를위한 데코레이터를 구현하는 실질적인 예를 고려해 봅시다. 이는 계산적으로 비싼 기능의 성능을 크게 향상시킬 수 있습니다. 우리는 fibonacci 함수를 사용하여 다음을 보여줍니다.

 <code class="python">def memoize(func): cache = {} def wrapper(*args): if args in cache: print(f"Returning cached result for {args}") return cache[args] result = func(*args) cache[args] = result print(f"Caching result for {args}") return result return wrapper @memoize def fibonacci(n): if n </code>
로그인 후 복사

이 예에서 :

  1. Memoize Decorator : memoize Decorator는 기능 통화 결과를 저장하기 위해 사전 cache 유지합니다. wrapper 함수는 주어진 인수 세트의 결과가 이미 캐시에 있는지 확인합니다. 그렇다면 캐시 된 결과를 반환합니다. 그렇지 않으면 결과를 계산하고 캐시를 캐시 한 다음 반환합니다.
  2. Fibonacci 기능 : fibonacci 함수는 Fibonacci 숫자를 재귀 적으로 계산합니다. 메모 화가 없으면 이는 많은 중복 계산, 특히 더 많은 숫자에 대해 많은 중복 계산으로 이어질 것입니다. fibonacci 에 적용된 @memoize 데코레이터는 각 Fibonacci 번호가 한 번만 계산되고 후속 통화에 대해 재사용되도록합니다.
  3. 실행 : fibonacci(10) 처음 호출되면 데코레이터가 결과를 계산하고 캐시합니다. fibonacci(10) 에 대한 두 번째 호출에서 캐시에서 결과를 검색하여 성능 향상을 보여줍니다.

이 예제는 데코레이터를 사용하여 메모 화를 구현하여 기능의 성능을 향상시키는 방법을 보여줍니다. 이는 최적화 및 동적 프로그래밍 시나리오의 일반적인 기술입니다.

위 내용은 파이썬의 데코레이터는 무엇입니까? 하나를 어떻게 만드나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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