在 python 中顺序调用函数时有条件

Conditional when calling functions sequentially in python

我有四个函数,每个函数 returns 结果都是一个列表。我希望我依次调用的这些函数中的任何一个都带来一个列表,而不是查看其他函数。感谢您的帮助。

def main(self):
    print(self.df_list)
    
    funcs = [(Calculate.free_two_kdv(self.df_list)),(Calculate.free_kdv(self.df_list)),(Calculate.zero_kdv(Calculate.find_largest_duplicated_value,self.df_list)),(Calculate.zero_with_other_kdv(Calculate.find_largest_duplicated_value,self.df_list))]
    for func in funcs:
        try:
            
            func()
            
        except ValueError:
            break

总之,我根本不希望它转到其他功能,以结果为准。

您正在立即调用函数并将结果存储在列表中。定义一个 new 函数来调用所需的函数。

def main(self):
    print(self.df_list)
    
    funcs = [lambda: Calculate.free_two_kdv(self.df_list),
             lambda: Calculate.free_kdv(self.df_list),
             lambda: Calculate.zero_kdv(Calculate.find_largest_duplicated_value, self.df_list),
             lambda: Calculate.zero_with_other_kdv(Calculate.find_largest_duplicated_value, self.df_list)
    ]

    for func in funcs:
        try:
            return func()
        except ValueError:
            pass

不清楚您是否希望 Calculate.find_largest_duplciated_value 作为第一个函数的 参数 ,或者您是否希望函数组合(即 f(g, x)f(g(x))。如果你要作文,那就是

    funcs = [lambda: Calculate.free_two_kdv(self.df_list),
             lambda: Calculate.free_kdv(self.df_list),
             lambda: Calculate.zero_kdv(Calculate.find_largest_duplicated_value(self.df_list)),
             lambda: Calculate.zero_with_other_kdv(Calculate.find_largest_duplicated_value(self.df_list))
    ]

假设 funcs return 中的函数是一个列表或 None:

for func in funcs:
    if func(): break
for func in funcs:
    flist = func()
    if flist: break

第二个接收来自函数的 return 值以进行进一步的工作。 try..except 在这种情况下比简单的布尔条件具有更大的性能成本。