首页 > 解决方案 > 在某些列表上链接函数调用

问题描述

假设我有三个函数,它需要一个接一个地处理一个列表。

def f1(lst):
    lst_processed = do_something_of_type1(lst)
    return lst_processed

def f2(lst):
    lst_processed = do_something_of_type2(lst)
    return lst_processed

def f3(lst):
    lst_processed = do_something_of_type3(lst)
    return lst_processed

我想input_list按以下顺序将这三个函数应用于某些函数:f1,然后f2因为f2需要来自的已处理列表f1,最后f3需要 的返回值f2

选项1:

output_list = f3(f2(f1(input_list)))

选项 2:

   output_list1 = f1(input_list)
   output_list2 = f2(output_list1)
   output_list = f3(output_list2)

其中一个是否比另一个更符合 PEP 8?

标签: pythonpython-3.xpep8

解决方案


从这个答案:Python中是否有链式调用方法?

def f1(i):
    return i + 1


def f2(i):
    return i + 1


def f3(i):
    return i + 1


def f4(i):
    return i + 1


from functools import reduce


def chain(*funcs):
    def chained_call(arg):
        return reduce(lambda r, f: f(r), funcs, arg)

    return chained_call


chained = chain(f1, f2, f3, f4)

print(chained(0))

推荐阅读