我可以将模块名称用作变量'在Python?

时间:2017-03-16 19:44:14

标签: python

是否可以使用模块的名称作为变量发送到函数并使用它指定/限制某些对象?谢谢!

module1.py

def foo(a, b):
    return (a + b) / 2.0

module2.py

def foo(a, b):
    return 2.0 * a*b / (a+b)

file3.py

import module1
import module2

def do(a, b, module_name):
   return module_name.foo(a, b)

2 个答案:

答案 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