itertools 库中的 tee() 函数
tee() function from itertools library
这是一个从列表中获取最小值、最大值和平均值的简单示例。
下面的两个函数有相同的结果。
我想知道这两个函数之间的区别。
为什么要使用 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 中迭代一次。之后它们是 "exhausted" 并且没有 return 更多值。
您可以在 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()
中的 return 值,您可以看到它们之间的区别。在这种情况下 _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)
这是一个从列表中获取最小值、最大值和平均值的简单示例。
下面的两个函数有相同的结果。
我想知道这两个函数之间的区别。
为什么要使用 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 中迭代一次。之后它们是 "exhausted" 并且没有 return 更多值。
您可以在 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()
中的 return 值,您可以看到它们之间的区别。在这种情况下 _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)