1. ホーム
  2. python

関数からグローバルインポートを行うには?

2023-11-21 17:40:31

質問

この問題に対するアプローチの仕方が雑なのではと心配になりますが

は、私がいくつかの条件に基づいてPythonでいくつかのインポートを作成したいとしましょう。

このために、私は関数を書きたいと思います。

def conditional_import_modules(test):
    if test == 'foo':
        import onemodule, anothermodule
    elif test == 'bar':
        import thirdmodule, and_another_module
    else:
        import all_the_other_modules

さて、インポートしたモジュールをグローバルに利用できるようにするにはどうしたらよいでしょうか。

例えば

conditional_import_modules(test='bar')
thirdmodule.myfunction()

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

インポートされたモジュールは単なる変数で、名前と値が結びつけられています。 ですから、必要なのはそれらをインポートして、グローバルにすることです。 global キーワードでグローバルにすることです。

>>> math
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'math' is not defined
>>> def f():
...     global math
...     import math
...
>>> f()
>>> math
<module 'math' from '/usr/local/lib/python2.6/lib-dynload/math.so'>