首頁 >後端開發 >Python教學 >了解 Python 裝飾器:帶有範例的初學者指南

了解 Python 裝飾器:帶有範例的初學者指南

Barbara Streisand
Barbara Streisand原創
2025-01-27 16:12:11821瀏覽

Understanding Python Decorators: A Beginner’s Guide with Examples

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>

範例 1:基本裝飾器

讓我們建立一個簡單的裝飾器,在函數運行之前和之後列印一條訊息。

<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>

範例 2:附參數的裝飾器

您可以建立一個接受參數的裝飾器,方法是將其包裝在另一個函數中。

<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>

裝飾器的實際應用

裝飾器廣泛應用於實際場景。以下是一些簡化的實際範例:

1. 記錄使用者操作

您可以使用裝飾器來記錄使用者每次執行操作的時間。

<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>

2. 追蹤執行時間

追蹤任務執行所需的時間,這對於效能監控非常有用。

<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>

3. 新增使用者問候語

裝飾器可以透過添加動態元素來個性化問候語。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn