执行导入函数列表

时间:2013-05-03 05:40:47

标签: python

我有一个包含功能的文件:

modules.py:

def a(str):
    return str + ' A'

def b(str):
    return str + ' B'

我想在循环中执行这些功能。类似的东西:

main.py:

import modules

modules_list = [modules.a, modules.b]
hello = 'Hello'

for m in modules_list:
    print m(hello)

结果应为:

>>> Hello A
>>> Hello B

这段代码很有用。我不想使用装饰器,因为modules.py中的功能太多了。 什么是最好的方法?感谢。

3 个答案:

答案 0 :(得分:4)

这样的事情:

import modules
hello = 'Hello'
for m in dir(modules):
    obj = getattr(modules,m)
    if hasattr( obj, "__call__" ): #or use `if callable(obj):`
        print obj(hello)

<强>输出:

Hello A
Hello B

顺便说一句,不要将str用作变量名,因为str已经被用作Python中内置函数的名称。

答案 1 :(得分:2)

import modules
hello = 'Hello'
for func in (x for x in modules.__dict__.values() if callable(x)):
    print func(hello)

您还可以使用按名称排序的inspect模块

import inspect
import modules
for name, func in inspect.getmembers(modules, callable):
    print func(hello)

答案 2 :(得分:0)

这可能是你正在寻找的东西。

>>> for functions in dir(modules):
        if not functions.startswith("__"):
                eval("modules."+functions+"(\"Hello\")")

'Hello A'
'Hello B'

这只是一个粗略的近似值。当然不是我会在程序中添加的代码。