Python 执行导入函数的列表
我有一个包含以下功能的文件: modules.py: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
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:这是一个非常有启发性的猜测。稍微澄清一下答案的结尾