python - 在某些列表上链接函数调用
问题描述
假设我有三个函数,它需要一个接一个地处理一个列表。
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?
解决方案
从这个答案: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))
推荐阅读
- javascript - 如何为 es5 风格的“类”实现 Typescript 接口?
- svg - SVG 组的鼠标悬停
- c# - 序列化复杂对象并反序列化为字符串以进行存储 - 它会工作吗?
- mysql - vb.net 无法连接到 sql server
- node.js - 如何通过 REST Api 在环回中使用 Decimal128
- azure-active-directory - 使用管理员/应用程序凭据委派和模拟用户
- php - 编辑代码后MySQL数据库中的重复项
- java - 在 Java 中验证 SSH 主机密钥格式
- bluetooth-lowenergy - 没有智能手机的 BLE
- php - 在laravel中的for循环内部查询