首頁 >後端開發 >Python教學 >你能從Python中的函數參數中提取原始變數名嗎?

你能從Python中的函數參數中提取原始變數名嗎?

Susan Sarandon
Susan Sarandon原創
2024-10-30 12:34:03463瀏覽

Can You Extract Original Variable Names from Function Arguments in Python?

如何從傳遞給函數的參數中提取原始變數名稱

考慮以下場景:您有一個函數需要變數名稱作為參數根據該名稱執行一些操作。有沒有辦法取得函數內的原始變數名稱?

為了回答這個問題,讓我們探索一種利用檢查模組的方法,該方法允許您檢索調用上下文並從程式碼上下文中提取變數名稱.

<code class="python">import inspect

def foo(a, f, b):
    # Get the stack frame of the calling function
    frame = inspect.currentframe()
    
    # Move up one level to get the frame of the calling context
    frame = inspect.getouterframes(frame)[1]

    # Get the source code context of the calling context
    string = inspect.getframeinfo(frame[0]).code_context[0].strip()
    
    # Extract the argument names from the code context
    args = string[string.find('(') + 1:-1].split(',')
    
    names = []
    for i in args:
        if i.find('=') != -1:
            # Handle keyword arguments
            names.append(i.split('=')[1].strip())
        else:
            # Handle positional arguments
            names.append(i)
            
    print(names)

def main():
    e = 1
    c = 2
    foo(e, 1000, b = c)

main()</code>

說明:

  1. inspect.currentframe() 取得目前函數的堆疊幀,在本例中為foo()。
  2. inspect.getouterframes() 在呼叫上下文中向上導航一級以取得呼叫函數 main() 的框架。
  3. inspect.getframeinfo() 檢索該函數的程式碼上下文資訊取得框架。
  4. 我們透過解析程式碼上下文來隔離參數列表,然後提取參數名稱,同時考慮位置參數和關鍵字參數。
  5. 最後,原始變數清單印出名稱。

範例輸出:

['e', '1000', 'c']

注意: 這種方法涉及檢查呼叫堆疊並解釋來源程式碼上下文脆弱且容易出錯。不建議實際使用,僅應考慮用於學術或娛樂目的。

以上是你能從Python中的函數參數中提取原始變數名嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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