什么是管道?
Python 中的管道是一种用于构建处理数据的一系列操作或函数的方法。每个操作的输出都会送到下一个操作中,最终导致最终结果。想象一下,一系列连接的管道,数据流经其中,在每个阶段进行转换。
有一个数字列表,并且想要:
- 删除奇数
- 将每个数字乘以 10
- 将每个数字加 5
- 计算平均值
可以为每个操作编写一个循环,创建新列表并迭代它们。然而,这种方法不是很有效。它使用额外的内存和多个循环,使代码的可读性降低且容易出错。
更好的方法是使用管道。这使可以在没有额外列表或循环的情况下链接操作。Python 的内置 map 和 filter 函数非常适合此。它们将函数应用于可迭代对象的每个项。您还可以使用 sum 和 len 进行计算。下面是使用管道的上述任务的更高效版本:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
average = sum(map(lambda n: n + 5, map(lambda n: n * 10, filter(lambda n: n % 2 == 0, numbers)))) / len(numbers)
print(average)
为获得更好的可读性,可使用库中的 pipe toolz 函数。 pipe 取初始值和一系列函数,依次应用每个函数。这使得代码更具可读性和优雅性
from toolz import pipe
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
average = pipe(numbers,
filter(lambda n: n % 2 == 0),
map(lambda n: n * 10),
map(lambda n: n + 5),
lambda x: sum(x) / len(x))
print(average)