通过使用其名称调用模块的功能(字符串)

在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 ......列表继续。


locals()["myfunction"]()

要么

globals()["myfunction"]()

当地人用当前的本地符号表返回一个字典。 全局变量返回带有全局符号表的字典。


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

module = __import__('foo')
func = getattr(module, 'bar')
func()
链接地址: http://www.djcxy.com/p/1615.html

上一篇: Calling a function of a module by using its name (a string)

下一篇: Static methods in Python?