Python创建一个以特定名称开头的所有函数的列表

时间:2017-07-17 11:38:00

标签: python

方案

我正在使用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_ *才会成为列表的一部分。

目的

添加我想要运行的功能,而无需更新列表。

2 个答案:

答案 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()