使用模块名称(字符串)调用功能的方法

2024-04-25 13:38:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python程序中,如果给定一个带有函数名的字符串,调用函数的最佳方法是什么。例如,假设我有一个模块foo,并且我有一个内容为"bar"的字符串。调用foo.bar()的最佳方法是什么?

我需要得到函数的返回值,这就是为什么我不使用eval。我通过使用eval定义一个返回函数调用结果的temp函数来解决这个问题,但我希望有一个更优雅的方法来实现这一点。


Tags: 模块方法函数字符串程序内容定义foo
3条回答

假设模块foo使用方法bar

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

您可以将第2行和第3行缩短为:

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

如果这对您的用例更有意义的话。

您可以在类实例绑定方法、模块级方法、类方法上以这种方式使用^{}。。。名单还在后面。

locals()["myfunction"]()

或者

globals()["myfunction"]()

locals返回具有当前本地符号表的字典。globals返回具有全局符号表的字典。

帕特里克的解决方案可能是最干净的。 如果您还需要动态获取模块,则可以按如下方式导入:

module = __import__('foo')
func = getattr(module, 'bar')
func()

相关问题 更多 >