我需要能够反射性地调用在同一模块中定义的函数,例如
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