如何保留裝飾函數的簽名

Barbara Streisand
發布: 2024-10-17 16:59:02
原創
872 人瀏覽過

How to Preserve Signatures of Decorated Functions

保留裝飾函數的簽名

使用通用裝飾器裝飾函數時會出現問題,該裝飾器會更改函數的參數,例如類型轉換、日誌記錄或記憶化。修飾函數無法繼承原始函數的文件和簽名,這使得理解其行為變得困難。

為了解決這個問題,已經提出了多種解決方法:

方法1:使用'裝飾器模組

使用pip 安裝「裝飾器」模組並修改裝飾器定義以包含decorator.decorator註解。這確保了裝飾器在保留函數簽名的同時保持通用性:

<code class="python">import decorator

@decorator.decorator
def args_as_ints(f, *args, **kwargs):
    # Perform argument conversion
    return f(*args, **kwargs)</code>
登入後複製

方法2:使用'functools.wraps()'

對於Python 3.4 及更高版本,' functools.wraps( )' 提供了一個自動保留函式簽章和文件的替代解決方案:

<code class="python">import functools

def args_as_ints(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        # Perform argument conversion
        return func(*args, **kwargs)
    return wrapper</code>
登入後複製

結論

兩種方法都有效地保留了原始函數的簽章和文件. 「decorator」模組適用於 Python 2 和 3,而「functools.wraps()」僅適用於 Python 3.4 及更高版本。

以上是如何保留裝飾函數的簽名的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板