2017-07-15 67 views
-2

我有以下功能我必须运行...这里是第一个3.但列表很长,它将继续增长。python在模块中运行函数作为循环

### 1 
try: 
    fr.ftp_link() 
    system.append('1') 
except: 
    errors.append('1') 


### 2 
try: 
    md.daily_fetch_all_prices() 
    system.append('2') 
except: 
    errors.append('2')  

### 3 
try: 
    RP.run_daily_RP() 
    system.append('3') 
except: 
    errors.append('3')  

我想让它成为一个循环。喜欢的东西:

tasks = [fr.ftp_link, md.daily_fetch_all_prices, RP.run_daily_RP] 
for i, task in enumerate(tasks, start=1): 
try: 
    task() 
    system.append(str(i)) 
except: 
    errors.append(str(i)) 

for i in range(0,len(tasks)): 
    try: 
     execute(tasks[i]) <----- not real code, need help here 
     system.append(i) 
    except: 
     errors.append(i) 

不知道tasks是什么样子,以及如何执行它

+0

你的问题是什么? –

+0

您有各种选择。你当前的系统,甚至没有一个表示任务的事物的一致接口,这似乎是一个不好的举动,但是你可以很容易地创建一个函数列表并遍历它,或者让这些任务实现一个特定的接口(例如他们都会拥有'.execute')并使用'__subclasses__'来遍历它们。但是,现在还没有足够的答案。 – jonrsharpe

回答

1

假设你只有不需要参数的函数,你可以去在Python中,函数是第一类对象,因此可以将它们传递给它们,将它们放入列表中等,然后调用它们分配给的任何变量。

如果你有参数和/或关键字参数,你必须去的任务,如形式(function, list_of_args, dict_of_kwargs) 的元组的列表更复杂的数据结构,然后去与以下内容:

try: 
    function, args, kwargs = task 
    function(*args, **kwargs) 

编辑:使用枚举进行索引。

+0

非常简单!谢谢 – jason