python在模块中运行函数作为循环

时间:2017-07-15 21:48:22

标签: python

我有以下功能我必须运行...这是第3个。但是列表很长,它会继续增长。

### 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')    

我想让它成为一个循环。类似的东西:

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会是什么样子以及如何执行它

1 个答案:

答案 0 :(得分:1)

假设您只有不需要参数的函数,可以使用:

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))

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

如果您有参数和/或关键字参数,则必须为任务寻找更复杂的数据结构,例如(function, list_of_args, dict_of_kwargs)形式的元组列表 然后使用以下内容:

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

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