ホームページ  >  記事  >  バックエンド開発  >  Pythonで関数の引数から元の変数名を抽出できますか?

Pythonで関数の引数から元の変数名を抽出できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 12:34:03395ブラウズ

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() は、呼び出しコンテキストの 1 つ上のレベルに移動して、呼び出し関数 main() のフレームを取得します。
  3. inspect.getframeinfo() は、取得したフレーム。
  4. コード コンテキストを解析して引数リストを分離し、位置引数とキーワード引数の両方を考慮して引数の名前を抽出します。
  5. 最後に、元の変数のリスト名前が出力されます。

出力例:

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

注: このアプローチには、コール スタックの検査と、ソース コード コンテキストは脆弱でエラーが発生しやすいものです。実用的な使用は推奨されておらず、学術目的または娯楽目的のみとして考慮してください。

以上がPythonで関数の引数から元の変数名を抽出できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。