-2

我有一个功能文件:

模块.py:

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

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

我想循环执行这些功能。就像是:

主要.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. 什么是最好的方法?谢谢。

4

3 回答 3

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 中内置函数的名称。

于 2013-05-03T05:49:28.470 回答
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)
于 2013-05-03T06:16:27.400 回答
0

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

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

'Hello A'
'Hello B'

这只是一个粗略的近似。当然不是我会放入程序的代码。

于 2013-05-03T05:51:14.043 回答