通过使用模块名称(字符串)来调用模块的功能
时间:2020-03-05 18:37:56 来源:igfitidea点击:
在Python程序中,给定带有函数名称的字符串的最佳方法是什么?例如,假设我有一个模块" foo",并且有一个字符串,其内容为" bar"。调用foo.bar()
的最佳方法是什么?
我需要获取函数的返回值,这就是为什么我不仅仅使用eval
的原因。我想出了如何通过使用eval
定义一个返回该函数调用结果的临时函数来做到这一点,但是我希望有一种更优雅的方法来做到这一点。
解决方案
回答
假设模块foo
和方法bar
:
import foo method_to_call = getattr(foo, 'bar') result = method_to_call()
到目前为止,第2行和第3行可以压缩为:
result = getattr(foo, 'bar')()
如果这对用例更有意义。我们可以通过这种方式在类实例绑定的方法,模块级方法,类方法上使用getattr
列表继续。
回答
帕特里克的解决方案可能是最干净的。
如果我们还需要动态提取模块,则可以按以下方式导入它:
module = __import__('foo') func = getattr(module, 'bar') func()
回答
locals()["myfunction"]()
或者
globals()["myfunction"]()
locals返回带有当前本地符号表的字典。 globals返回带有全局符号表的字典。