是否可以使用模块的名称作为变量发送到函数并使用它指定/限制某些对象?谢谢!
def foo(a, b):
return (a + b) / 2.0
def foo(a, b):
return 2.0 * a*b / (a+b)
import module1
import module2
def do(a, b, module_name):
return module_name.foo(a, b)
答案 0 :(得分:3)
根据您的问题,我假设您希望能够调用任何本地导入模块的 ,提供args + module_name(作为字符串,如变量名称所示)。< / p>
使用locals()
代替sys.modules
会缩小对此文件中导入的模块的搜索范围。我的解决方案:
import inspect
import module1
import module2
def do(a, b, module_name):
module = locals().get(module_name)
if inspect.ismodule(module):
return module.foo(a, b)
raise NameError('no such module imported with this name')
答案 1 :(得分:1)
您可以使用字典的形式访问模块,以便使用sys.modules
轻松查找:
import module1
import module2
import sys
def do(a, b, module_name):
return sys.modules[module_name].foo(a, b)
通过这种方式可以调用它们:
do(3, 5, 'module1') # returns 4.0
do(3, 5, 'module2') # returns 3.75