파이썬의 데코레이터는 소스 코드를 직접 변경하지 않고 기능 또는 클래스의 동작을 수정하거나 향상시키는 강력하고 우아한 방법입니다. 그것들은 본질적으로 다른 기능을 인수로 취하고 행동을 확장하거나 변경하는 기능입니다. 데코레이터를 사용하면 랩핑 된 기능이 실행되기 전후에 코드를 실행하기 위해 다른 함수를 랩핑 할 수 있습니다.
데코레이터를 만들려면 다음을 따라갈 수 있습니다.
간단한 데코레이터를 만드는 방법의 예는 다음과 같습니다.
<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
함수 내에서 코드가 실행됩니다.
데코레이터는 파이썬 프로그래밍에서 몇 가지 주요 이점을 제공합니다.
@decorator
구문은 명확하고 간결하여 코드를 쉽게 읽고 이해할 수 있도록합니다.데코레이터는 다양한 방식으로 기능의 동작을 수정하는 데 사용될 수 있습니다. 몇 가지 일반적인 응용 프로그램은 다음과 같습니다.
로깅 : 데코레이터는 디버깅 및 모니터링 목적으로 기능 호출, 입력, 출력 및 실행 시간을 기록 할 수 있습니다.
<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>
타이밍 : 데코레이터를 사용하여 기능의 실행 시간을 측정 할 수 있으며, 이는 성능 최적화에 유용합니다.
<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>
인증 및 승인 : 데코레이터를 사용하여 특정 기능에 액세스하기 전에 사용자가 인증되어 있는지 확인할 수 있습니다.
<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>
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>
이 예에서 :
memoize
Decorator는 기능 통화 결과를 저장하기 위해 사전 cache
유지합니다. wrapper
함수는 주어진 인수 세트의 결과가 이미 캐시에 있는지 확인합니다. 그렇다면 캐시 된 결과를 반환합니다. 그렇지 않으면 결과를 계산하고 캐시를 캐시 한 다음 반환합니다.fibonacci
함수는 Fibonacci 숫자를 재귀 적으로 계산합니다. 메모 화가 없으면 이는 많은 중복 계산, 특히 더 많은 숫자에 대해 많은 중복 계산으로 이어질 것입니다. fibonacci
에 적용된 @memoize
데코레이터는 각 Fibonacci 번호가 한 번만 계산되고 후속 통화에 대해 재사용되도록합니다.fibonacci(10)
처음 호출되면 데코레이터가 결과를 계산하고 캐시합니다. fibonacci(10)
에 대한 두 번째 호출에서 캐시에서 결과를 검색하여 성능 향상을 보여줍니다.이 예제는 데코레이터를 사용하여 메모 화를 구현하여 기능의 성능을 향상시키는 방법을 보여줍니다. 이는 최적화 및 동적 프로그래밍 시나리오의 일반적인 기술입니다.
위 내용은 파이썬의 데코레이터는 무엇입니까? 하나를 어떻게 만드나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!