Python関数の引数の数を取得する方法【inspectモジュール活用】
Python関数の引数の数を調べるには?
たとえば、次のようなスクリプト qux.py があるとします。
#qux.py
def aMethod1(arg1, arg2):
pass
def aMethod2(arg1, arg2, arg3, arg4, arg5):
pass
このスクリプトの中身が分からない(ソースコードにアクセスできない)場合でも、Pythonの標準ライブラリである inspect モジュールを使えば、関数が受け取る引数の数や名前を簡単に調べることができます。
inspectモジュールで引数の一覧を取得する
まず、inspect モジュールをインポートし、対象となるスクリプト qux.py も一緒に読み込みます。
inspect.getargspec(関数名) を呼び出すと、その関数のすべての引数に関する情報を格納したタプルが返されます。このタプルの最初の要素は、通常の位置引数の名前が入ったリストになっています。
たとえば x = inspect.getargspec(foo) とした場合、len(x[0]) を計算することで、その関数の引数の数を取得できます。
#fubar.py import qux import inspect x = inspect.getargspec(qux.aMethod1) y = inspect.getargspec(qux.aMethod2) print(len(x[0])) # → 2 print(len(y[0])) # → 5
このスクリプトをターミナルから実行します。
$ python fubar.py
すると、次のような出力が得られます。
2 5
注意:getargspec()はPython 3.11で削除されました
inspect.getargspec() はPython 3.0で非推奨となり、Python 3.11以降では削除されているため、エラーになります。現在の環境では、代わりに inspect.getfullargspec() または inspect.signature() を使うのが推奨されています。
import inspect # 方法1:getfullargspecを使う spec = inspect.getfullargspec(qux.aMethod2) print(len(spec.args)) # → 5 # 方法2:signatureを使う(現代のPythonで一般的) sig = inspect.signature(qux.aMethod2) print(len(sig.parameters)) # → 5
inspect.signature() は引数の名前だけでなく、デフォルト値や型アノテーションなどの情報も柔軟に扱えるため、最近のPythonコードではこちらを使うのが主流です。外部ライブラリの中身を解析したいときなどにも便利なので、覚えておくと役立ちます。
-
Pythonでリスト内の最小値を見つける方法を解説
この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。
-
Pythonで関数から別の関数を返す方法をわかりやすく解説
Pythonは第一級関数(first-class functions)をサポートしているプログラミング言語です。実際、Pythonにおけるすべての関数は第一級オブジェクトとして扱われます。 これは何を意味するのでしょうか。具体的には、以下のようなことが可能になります。 関数の中から別の関数を返す(returnする) 関数をリストや辞書などのコレクションに格納する 関数を、通常の変数やオブジェクトと同じように扱う さらに、関数の中で別の関数を定義し、それを返すことさえできます。これはクロージャ(closure)と呼ばれる強力なテクニックの基礎にもなる概念です。 サンプルコード:関数内で関数を