😊

python でモジュール定義の変数をリストアップ

2022/02/12に公開

python でモジュール定義の変数をリストアップ

ある外部モジュールで定義された変数とその値をリストアップする。
主にデバッグ目的です。

例として使用する外部モジュール定義

module1.py

TEST1 = 1
TEST2 = "abc"
TEST3 = None

__TEST4__ = 4
_TEST5_   = 5

外部モジュールの変数をリストアップする側

main.py

import module1

for key, value in vars(module1).items():
    if key.startswith('__'):
        continue

    print(key, value)

実行結果

>python main.py
TEST1 1
TEST2 abc
TEST3 None
_TEST5_ 5

__TEST4__ 以外は出力されている。

解説

組み込み関数のvars() を使って、外部モジュール (ここでは module1) の属性(正確には __dict__ 属性) をリストアップする。

組み込み関数のvars() は dictionary を返すので、items() メソッド` を使って、キーと値を取り出す。

ここでビルトインの変数も含まれれるので __ で始まる 変数名は除外している。

__TEST4__ のように自分で定義した変数も除外されるが、これは用途に応じてフィルタリングする条件を調整すればいい。

__ で始まる 変数名を一律で除外するのではなく、例えばビルトインの変数は __builtins__ にまとめられているので、これを除外すれば大分数は減らせる。__name____file__ などは除外できないのが、何を調べたいかと、自前で定義していないものが含まれていても問題がないか次第である。

参考

https://docs.python.org/ja/3/tutorial/modules.html#the-dir-function

https://docs.python.org/ja/3/tutorial/datastructures.html#looping-techniques

Discussion