2

在 Python 中,如果您想动态导入模块(例如从字符串名称),您可以使用模块importlib和函数importlib.import_module("foo"),这基本上给出了相同的结果import foo(但它是动态的)。

无论如何,在我的程序中,我使用一个函数从列表中导入一个模块,所以它看起来像这样:

# Note: this code does not produce the desired result.
# Please see the snippet below, for the working version
module_list = ["os"]

def import_module(name):
    exec("global {}".format(name))
    exec("import {}".format(name))
for item in module_list:
    import_module(item)

我在网络上的其他任何地方都没有看到过这种类型的解决方案。我要问的是,为什么?这是不好的做法,因为我正在使用该exec()功能(因为我已经读过无数次不要这样做)还是因为它只是更令人困惑

编辑:我觉得有必要注意这不是我上面的确切代码,而是与这个问题实际相关的部分,而不是让人们感到困惑

编辑(2):感谢用户 Aran-Fey 发现我的代码不起作用。我没有正确测试这个特定的片段。这是适用于 python 3.6 的版本:

module_list = ["os"]

def import_module(name):
    exec("global {}".format(name), globals())
    exec("import {}".format(name), globals())

for item in module_list:
    import_module(item)
4

0 回答 0