可以从变量模块调用函数吗?



file1.py

def foo(x):
print(x)

file2.py

def foo(x):
print(x)

main.py

import file1
import file2
#User inputs either file1 or file2
variable = input()
#--
#TODO: A way to call the correct module so either file1.foo('test') or file2.foo('test')
#--

代码解释了我想要实现的目标,但我找不到解决问题的方法,我一直在寻找几个小时。也许我只是找错了地方或找错了关键字。大多数在线解决方案都是针对相反问题的解决方案。(常量模块,可变功能(

请记住,这是我实际代码的简化版本。在这个例子中,我可以用 if 语句来解决它,但在我的实际项目中,我有大约 30 个可能的模块可以调用,所以用 if 语句修复它并不整洁。

提前感谢!

也许你正在寻找__import__

file = __import__(input())
file.foo()

没有__import__的方法是使用字典:

import file1
import file2
modules = {'file1': file1,
'file2': file2}
modules[input()].foo()

您可以使用额外的foo变量,该变量根据输入引用file1.foofile2.foo,然后稍后调用foo

if variable == 'file1':
foo = file1.foo
else:
foo = file2.foo
foo('test')

在多个模块的情况下,您可以使用importlib.import_module

import importlib
mod = importlib.import_module(variable)
mod.foo('test')

最新更新