如何在同一模块中反射性地获取函数



我需要能够反射性地调用在同一模块中定义的函数,例如

a = getattr('foo_1')
b = a(5)
def foo_1(x) : return x*x

这失败了,因为getattr需要 2 个参数,但我不知道第一个参数该放什么,因为没有封闭类型或其他模块可以按名称导入。如果确定答案很简单,但我还没有找到。

(是的,我知道这看起来很愚蠢 - 如果函数是在同一模块中定义的,为什么不直接调用它?原因是代码是从多个源动态构建的,然后运行。foo_1可能存在,也可能不存在,无论如何都是遵循名称样式foo_<n>的众多函数之一。我需要找到确实存在的那些,然后调用它们。这只是一个简化的示例。我也希望得到关于在尝试调用它之前测试foo_1是否存在的最佳方法的建议。

使用globals访问模块命名空间中的名称:

def foo_1():
print('hi')

globals()['foo_1']()

结果:

hi

最新更新