gpt4 book ai didi

python - yield 被 zip 调用得太频繁了?

转载 作者:太空狗 更新时间:2023-10-30 02:42:58 25 4
gpt4 key购买 nike

在下面的代码中,一个计数被压缩成一个包含两个元素的列表。我预计计数器会被调用两次,但它被调用了三次。为什么?

def equivalent_count(start=0, step=1):
"""From python docs for itertools.count."""
n = start
while True:
print('count in loop =', n)
yield n
n += step

c = equivalent_count()
l = [0, 1]

for i, j in zip(c, l):
pass

输出是:

count in loop = 0
count in loop = 1
count in loop = 2

zip 的文档指出,“迭代器在最短的可迭代输入耗尽时停止。”

最佳答案

因为 c 的每次迭代都在 l 的等效迭代之前计算,所以 Python 不知道 l 已经用完了。如果您也将 l 替换为生成器,您会看到这一点:

def gen_l(lst):
for l in lst:
print 'gen_l called'
yield l

c = equivalent_count()
l = gen_l([0, 1])
for i, j in zip(c, l):
pass

输出:

count in loop = 0
gen_l called
count in loop = 1
gen_l called
count in loop = 2

关于python - yield 被 zip 调用得太频繁了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34963678/

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