関数がa_method
次のように定義されているとします。
def a_method(arg1, arg2):
pass
それ自体から始めてa_method
、引数名を取得するにはどうすればよいですか?たとえば、 のような文字列のタプルとして取得できますか("arg1", "arg2")
?
ベストアンサー1
見てみましょうinspect
モジュール - さまざまなコード オブジェクトのプロパティの検査を実行します。
>>> inspect.getfullargspec(a_method)
(['arg1', 'arg2'], None, None, None)
その他の結果は、*args および **kwargs 変数の名前と、提供されるデフォルトです。つまり、
>>> def foo(a, b, c=4, *arglist, **keywords): pass
>>> inspect.getfullargspec(foo)
(['a', 'b', 'c'], 'arglist', 'keywords', (4,))
一部の呼び出し可能関数は、Python の特定の実装ではイントロスペクションできない可能性があることに注意してください。たとえば、CPython では、C で定義された一部の組み込み関数は、引数に関するメタデータを提供しません。その結果、組み込み関数で をValueError
使用すると、が返されます。inspect.getfullargspec()
Python 3.3以降では、inspect.signature()
呼び出し可能なオブジェクトの呼び出しシグネチャを確認するには:
>>> inspect.signature(foo)
<Signature (a, b, c=4, *arglist, **keywords)>