Python - 獲取函式簽名


理解 Python 中的函式簽名對於揭示函式的內部工作原理至關重要。inspect 模組提供了一系列用於檢索簽名的方法,允許您分析引數、訪問資料型別並確定預設值。透過探索這些技術,您可以獲得寶貴的見解,從而提高程式碼的可讀性、可維護性和文件性。因此,深入瞭解函式簽名的世界,並更深入地瞭解您的 Python 程式碼。

使用 inspect 方法

inspect 方法提供了一種強大的方法來檢索函式簽名。此方法使我們能夠訪問有關函式的引數、資料型別、預設值等的詳細資訊。這有助於開發人員更好地瞭解函式、需求和屬性。

示例

我們首先使用以下程式碼中的 import 語句匯入 inspect 模組。接下來,我們建立了一個名為 my_function 的空函式,它接受幾個引數及其提示。我們使用 inspect 模組的 signature 方法建立了一個物件,並將 my_function 作為引數傳遞。接下來,我們使用 parameters 方法訪問引數的詳細資訊。我們遍歷返回值並列印它。

import inspect

def my_function(arg1: int, arg2: str, *args: int, **kwargs: float) -> bool:
    pass

signature = inspect.signature(my_function)
params = signature.parameters

for name, param in params.items():
    print(f"Parameter: {name}")
    print(f"Type: {param.annotation}")
    print(f"Default Value: {param.default}")
    print(f"Kind: {param.kind}")
    print("---")

輸出

Parameter: arg1
Type: 
Default Value: 
Kind: POSITIONAL_OR_KEYWORD
---
Parameter: arg2
Type: 
Default Value: 
Kind: POSITIONAL_OR_KEYWORD
---
Parameter: args
Type: 
Default Value: 
Kind: VAR_POSITIONAL
---
Parameter: kwargs
Type: 
Default Value: 
Kind: VAR_KEYWORD
---

使用 inspect 模組的 getfullargspec 函式

inspect 模組的 getfullargspec 函式是我們可以用來檢索有關函式引數的全面資訊的另一種方法。它提供了對位置引數和關鍵字引數的詳細分析。它還支援可變引數和關鍵字引數。

示例

在以下程式碼中,我們匯入了 inspect 庫並定義了一個名為 my_function 的使用者定義函式。接下來,我們使用 getfullargspec 方法建立了一個名為 argspec 的物件。我們將我們的函式作為引數傳遞。接下來,我們使用 zip 方法組合引數詳細資訊和註釋值,並使用 for 迴圈迭代和列印結果。

import inspect

def my_function(arg1: int, arg2: str, *args: int, **kwargs: float) -> bool:
    pass

argspec = inspect.getfullargspec(my_function)

for name, annotation in zip(argspec.args, argspec.annotations.values()):
    print(f"Parameter: {name}")
    print(f"Type: {annotation}")
    print("---")

輸出

Parameter: arg1
Type: <class 'bool'>
---
Parameter: arg2
Type: <class 'int'>
---

結論

理解 Python 中的函式簽名對於揭示函式的內部工作原理至關重要。inspect 模組提供了一系列用於檢索簽名的方法,允許您分析引數、訪問資料型別並確定預設值。透過探索這些技術,您可以獲得寶貴的見解,從而提高程式碼的可讀性、可維護性和文件性。因此,深入瞭解函式簽名的世界,並更深入地瞭解您的 Python 程式碼。

更新於: 2023-07-18

1K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.