1. ホーム
  2. パイソン

[解決済み】Python関数の引数の数を調べるにはどうしたらいいですか?

2022-04-30 20:45:44

質問

Pythonの関数の引数の数を調べるにはどうしたらいいですか?私はそれが持っているどのように多くの通常の引数とどのように多くの名前付き引数を知る必要があります。

def someMethod(self, arg1, kwarg1=None):
    pass

このメソッドには2つの引数と1つの名前付き引数があります。

どのように解決するのですか?

以前から認められている回答は 非推奨 現在 Python 3.0 . を使う代わりに inspect.getargspec を選択する必要があります。 Signature クラスがこれに取って代わった。

関数のシグネチャを作成するのは簡単です。 signature 機能 :

from inspect import signature

def someMethod(self, arg1, kwarg1=None):
    pass

sig = signature(someMethod)

これで、そのパラメータを素早く表示するために str を入力します。

str(sig)  # returns: '(self, arg1, kwarg1=None)'

また、属性名とパラメータオブジェクトの対応付けは sig.parameters .

params = sig.parameters 
print(params['kwarg1']) # prints: kwarg1=20

さらに lensig.parameters をクリックすると、この関数が必要とする引数の数も表示されます。

print(len(params))  # 3

の各エントリーは params マッピングは、実際には Parameter オブジェクト という属性があり、さらに使いやすくなっています。例えば、パラメータを取得して、そのデフォルト値を表示することが簡単にできるようになりました。

kwarg1 = params['kwarg1']
kwarg1.default # returns: None

に含まれる残りのオブジェクトについても同様です。 parameters .


Pythonに関しては 2.x ユーザは inspect.getargspec はない 非推奨ですが、この言語はもうすぐそうなります :-)。そのため Signature クラスが利用できないのは 2.x シリーズを使用し、今後も使用することはありません。ですから、あなたはまだ inspect.getargspec .

Python 2 と 3 の間の移行についてですが、もしあなたが getargspec に切り替えると、Python 2の signature3 は難しすぎる。 という貴重な選択肢があります。 を使用することで inspect.getfullargspec . と似たようなインターフェイスを提供します。 getargspec (呼び出し可能な単一の引数) を使って、関数の引数を取得することができます。 getargspec にはない。

from inspect import getfullargspec

def someMethod(self, arg1, kwarg1=None):
    pass

args = getfullargspec(someMethod)

と同様に getargspec , getfullargspec が返されます。 NamedTuple には引数が含まれます。

print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})