我可以使用模块名作为';变量';用Python?

我可以使用模块名作为';变量';用Python?,python,Python,是否可以使用模块名称作为变量发送到函数并使用它指定/限制某个对象?谢谢 模块1.py 模块2.py file3.py 您可以使用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') # re

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

模块1.py 模块2.py file3.py
您可以使用
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

根据您的问题,我假设您希望能够调用任何本地导入模块的foo方法,提供args+module_名称(如变量名称所示,以字符串形式)

使用
locals()
而不是
sys.modules
将搜索范围缩小到该文件中导入的模块

我的解决方案:
尝试此操作时发生了什么?什么类型的
模块\u name
?它是一个字符串(可能来自用户输入),还是一个实际的模块对象?一般来说,使用变量名作为数据是一个坏主意(变量名是程序员的,而不是用户的)。如果您想将名称与对象(如模块)关联,则应该使用字典(实际上,Python确实在封面下使用字典来实现某些类型的变量)。如果您提供了一个可运行的示例,我认为这个问题会更清楚。。。只需将
print(do(1,2,“module1”))
添加到底部,就可以了。@Blckknght,谢谢你的教育性评论,我对python编码(或编码)非常陌生,我确实注意到,正如你所说,使用字符串确实不是一个很好的主意。你有没有进一步的资料给我,我该怎么办?谢谢@t德莱尼,@paulh,谢谢。当我第一次尝试这个时,我没有通过,可能是因为其他一些错误。但实际上没关系。我感谢你给我的所有答案,这些答案给了我很多启发!为什么投了反对票,这不是OP的问题吗?引用一个模块的名称?我猜是下层选民误解了这个问题。举个例子,例如
do(3,5,'module1')
do(3,5,'module2')
可能会有所帮助。谢谢@ZeroPiraeus,我想你是对的。“我将用这些来扩展问题。”博斯尼亚克删除了我的答案,因为我第一眼就误解了这个问题。我认为,对于这个合适的答案,人们并不完全期待投反对票。干杯这取决于你想要达到的目标。理想情况下,如果您能以更好的方式组织代码,则没有。如果不能,那么使用模块引用可能比必须清理和验证字符串要好。
import module1
import module2

def do(a, b, module_name):
   return module_name.foo(a, b)
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
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')