通过字符串调用模块的函数

2429 投票
18 回答
1162529 浏览
提问于 2025-04-10 23:49

我该如何用一个字符串来调用一个函数的名字呢?比如说:

import foo
func_name = "bar"
call(foo, func_name)  # calls foo.bar()

18 个回答

478

根据Patrick的解决方案,如果你想动态地获取模块,可以使用以下方式来导入它:

module = __import__('foo')
func = getattr(module, 'bar')
func()
772
  • 使用 locals(),这个函数会返回一个字典,里面包含了当前的局部变量信息:

    locals()["myfunction"]()
    
  • 使用 globals(),这个函数会返回一个字典,里面包含了全局变量的信息:

    globals()["myfunction"]()
    
2922

假设有一个模块叫做 foo,里面有一个方法叫 bar

import foo
bar = getattr(foo, 'bar')
result = bar()

getattr 这个函数也可以用在类的实例方法、模块级别的方法、类方法等等,能用的地方很多。

撰写回答