環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

Python のファイルにある関数の一覧を取得する - dir と getmembers の違い

最終更新日 2023.02.18

Python のファイルにある関数の一覧を取得するには inspect ライブラリを使います。今回は misc というファイルにある関数をとりだします。

misc.py

food = 'pizza'


def add(number: int):
    return number + 1


def hello():
    print('hello')

import でファイルをインポートしたら、それを getmembers の引数にします。二番目に isfunction をあてると関数のみが抽出されます。

from inspect import getmembers, isfunction
from file import misc

members = dir(misc)
functions = getmembers(misc, isfunction)

print(members)
# ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'food', 'hello']

print(functions)
# [('add', <function add at 0x101012980>), ('hello', <function hello at 0x1010128e0>)]

getmembers はリストを返します。それぞれの要素は名前と関数オブジェクトのタプルです。

from inspect import getmembers, isfunction
from file import misc

functions = getmembers(misc, isfunction)

for function in functions:
    name = function[0]
    instance = function[1]

    print(f'{name} : {type(name)}')
    print(f'{instance} : {type(instance)}')

# add : <class 'str'>
# <function add at 0x10577d580> : <class 'function'>
# hello : <class 'str'>
# <function hello at 0x105802980> : <class 'function'>

dir

最初のコードにある dir__builtins__ といった余計なメンバーも返します。food はファイル misc.py に定義された変数で、これも dir の返すリストに含まれている。

関数の一覧をとりだすときは dir よりも getmembers のほうがいいかもしれない。