我有一个包含功能的文件:
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
中的功能太多了。
什么是最好的方法?感谢。
答案 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'
这只是一个粗略的近似值。当然不是我会在程序中添加的代码。