方案:
我正在使用python来循环执行一些函数......一遍又一遍。
我是怎么做的:
我创建了一个包含我想要执行的所有函数的列表,然后我就这样做了。
# Define the functions before using 'em
def this_f:
pass
def the_other:
pass
....
# List of f() I want to run
funciones_escrapeadoras = [
this_f,
the_other,
...
]
# Call them all, cyclically
while True:
for funcion_escrapeadora in funciones_escrapeadoras:
funcion_escrapeadora()
问题:
如果我将所有希望成为列表一部分的函数作为前缀,有没有办法自动识别它们并将它们放入该列表中?
示例:
我定义了函数:
autorun_lalaa,hello_world,autorun_lololo,...
只有autorun_lalaa和autorun_lololo以及autorun_ *才会成为列表的一部分。
目的:
添加我想要运行的功能,而无需更新列表。
答案 0 :(得分:2)
使用内置locals()
或globals()
:
for name, obj in locals().iteritems():
if name.startswith('autorun_'):
obj()
你也可以制作一个这里描述的装饰器:https://wiki.python.org/moin/PythonDecorators - 然后这些函数不需要名字前缀,你可以让装饰器将函数添加到列表中。
答案 1 :(得分:1)
列出您可以使用的模块的所有功能和变量的名称:
funcs_n_vars = dir(modulename)
然后你可以迭代它来过滤列表:
filtered_funcs = [func for func in funcs_n_vars if ('filter' in func)]
最后,要从列表中调用方法,您可以执行以下操作:
for func in filtered_funcs
method_to_call = getattr(modulename, func)
result = method_to_call()