Python 执行导入函数的列表

Python 执行导入函数的列表,python,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) 结果应该是: >&g

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

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
中的函数太多了。 最好的方法是什么?谢谢。

诸如此类:

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

这可能是您正在寻找的

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

'Hello A'
'Hello B'
这只是一个粗略的近似值。当然不是我会放在程序中的代码

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)

代码很好。他想要一种更通用的方法,程序员不必指定要执行的函数。不要使用
str
作为变量名:def a(strg):return strg+'a'def b(strg):return strg+'b'你的程序无论如何都可以运行,除非你试图在其他地方使用
str(foo)
,但避免隐藏内置变量名是一种很好的做法。@Sukritkalla:我不确定-他说程序不起作用,并不是说他想优化它。我想他想要一种通用的方法,自动从模块中获取函数并按顺序传递hello字符串的工具。@Sukritkalla:这是一个非常有启发性的猜测。稍微澄清一下答案的结尾