Python 데코레이터: 초보자 가이드 및 예제
Python 데코레이터는 함수나 메서드의 동작을 수정하기 위한 강력하고 다양한 도구입니다. 이를 통해 구조를 변경하지 않고도 기존 코드에 기능을 추가할 수 있습니다. 이 기사에서는 데코레이터를 심층적으로 살펴보고 이를 효과적으로 이해하고 사용하는 데 도움이 되는 간단한 예제를 제공합니다.
Python의 데코레이터는 본질적으로 다른 함수를 인수로 받아 해당 동작을 확장하거나 변경하는 함수입니다. 데코레이터는 일반적으로 기존 함수나 메서드에 로깅, 액세스 제어, 메모, 유효성 검사와 같은 기능을 추가하는 데 사용됩니다.
Python의 데코레이터는 @decorator_name
구문을 사용하여 함수 정의에 적용됩니다.
기본 데코레이터 함수의 구조는 다음과 같습니다.
<code class="language-python">def decorator_function(original_function): def wrapper_function(*args, **kwargs): # 在原始函数执行之前的代码 result = original_function(*args, **kwargs) # 在原始函数执行之后的代码 return result return wrapper_function</code>
@decorator_name
구문을 사용하거나 수동으로 함수에 데코레이터를 적용할 수 있습니다.
<code class="language-python">@decorator_function def some_function(): print("这是原始函数。") # 等同于: # some_function = decorator_function(some_function)</code>
함수 실행 전후에 메시지를 인쇄하는 간단한 데코레이터를 만들어 보겠습니다.
<code class="language-python">def simple_decorator(func): def wrapper(): print("函数调用之前。") func() print("函数调用之后。") return wrapper @simple_decorator def say_hello(): print("Hello, World!") say_hello()</code>
출력:
<code>函数调用之前。 Hello, World! 函数调用之后。</code>
매개변수를 다른 함수로 래핑하여 매개변수를 받아들이는 데코레이터를 만들 수 있습니다.
<code class="language-python">def repeat_decorator(times): def decorator(func): def wrapper(*args, **kwargs): for _ in range(times): func(*args, **kwargs) return wrapper return decorator @repeat_decorator(3) def greet(name): print(f"Hello, {name}!") greet("Alice")</code>
출력:
<code>Hello, Alice! Hello, Alice! Hello, Alice!</code>
데코레이터는 실제 시나리오에서 널리 사용됩니다. 다음은 몇 가지 단순화된 실제 예입니다.
데코레이터를 사용하면 사용자가 작업을 수행할 때마다 기록할 수 있습니다.
<code class="language-python">def log_action(func): def wrapper(*args, **kwargs): print(f"操作:正在执行 {func.__name__}。") return func(*args, **kwargs) return wrapper @log_action def upload_file(filename): print(f"正在上传 {filename}...") upload_file("report.pdf")</code>
출력:
<code>操作:正在执行 upload_file。 正在上传 report.pdf...</code>
작업을 실행하는 데 걸리는 시간을 추적하면 성능 모니터링에 유용합니다.
<code class="language-python">import time def track_time(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(f"{func.__name__} 执行耗时 {end - start:.2f} 秒。") return result return wrapper @track_time def download_file(file_size): time.sleep(file_size / 10) # 模拟下载时间 print("下载完成。") download_file(50)</code>
출력:
<code>下载完成。 download_file 执行耗时 5.00 秒。</code>
데코레이터는 동적 요소를 추가하여 인사말을 개인화할 수 있습니다.
<code class="language-python">def add_greeting(func): def wrapper(name): print("您好,欢迎!") func(name) return wrapper @add_greeting def show_user_profile(name): print(f"用户资料:{name}") show_user_profile("Alice")</code>
출력:
<code>您好,欢迎! 用户资料:Alice</code>
@decorator
구문을 사용하여 쉽게 적용할 수 있습니다. 데코레이터를 마스터하면 간결하고 효율적인 Python 코드를 작성하는 데 유용한 도구를 얻을 수 있습니다. 개념을 익히기 위해 제공된 예제를 시험해 보세요!
위 내용은 Python 데코레이터 이해: 예제가 포함된 초보자 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!