gpt4 book ai didi

python - itertools 库中的 tee() 函数

转载 作者:行者123 更新时间:2023-12-03 16:35:15 29 4
gpt4 key购买 nike

这是一个从列表中获取最小值、最大值和平均值的简单示例。
下面的两个函数具有相同的结果。
我想知道这两个函数的区别。
以及为什么使用 itertools.tee() ?
它提供什么优势?

from statistics import median
from itertools import tee

purchases = [1, 2, 3, 4, 5]

def process_purchases(purchases):
min_, max_, avg = tee(purchases, 3)
return min(min_), max(max_), median(avg)

def _process_purchases(purchases):
return min(purchases), max(purchases), median(purchases)

def main():
stats = process_purchases(purchases=purchases)
print("Result:", stats)
stats = _process_purchases(purchases=purchases)
print("Result:", stats)

if __name__ == '__main__':
main()

最佳答案

迭代器在python中只能迭代一次。之后它们会“耗尽”并且不会返回更多值。

您可以在 map() 之类的函数中看到这一点。 , zip() , filter()和许多其他人:

purchases = [1, 2, 3, 4, 5]

double = map(lambda n: n*2, purchases)

print(list(double))
# [2, 4, 6, 8, 10]

print(list(double))
# [] <-- can't use it twice

如果向它们传递迭代器,您可以看到两个函数之间的差异,例如来自 map() 的返回值.在这种情况下 _process_purchases()失败,因为 min()耗尽迭代器并且没有为 max() 留下任何值和 median() .
tee()接受一个迭代器并给你两个或更多,允许你多次使用传递给函数的迭代器:
from itertools import tee
from statistics import median

purchases = [1, 2, 3, 4, 5]

def process_purchases(purchases):
min_, max_, avg = tee(purchases, 3)
return min(min_), max(max_), median(avg)


def _process_purchases(purchases):
return min(purchases), max(purchases), median(purchases)

double = map(lambda n: n*2, purchases)
_process_purchases(double)
# ValueError: max() arg is an empty sequence

double = map(lambda n: n*2, purchases)
process_purchases(double)
# (2, 10, 6)

关于python - itertools 库中的 tee() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61854891/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com