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中文網其他相關文章!