gpt4 book ai didi

python - 将生成器分配给字典直接抛出 StopIteration

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:26 25 4
gpt4 key购买 nike

为什么这段代码抛出“StopIteration”:

stub_generator = (x for x in range(5))
stub_dict = {}
stub_dict[next(stub_generator)] = list(stub_generator)

这行得通吗?

stub_generator = (x for x in range(5))
stub_dict = {}
temp_1 = next(stub_generator)
temp_2 = list(stub_generator)
stub_dict[temp_1] = temp_2

最佳答案

这种行为是因为两件事:

  1. 赋值语句的右侧先于左侧求值。

  2. 生成器对象只能迭代一次。


进一步解释,当这段代码被执行时:

stub_dict[next(stub_generator)] = list(stub_generator)

这部分:

list(stub_generator) 

将在这部分之前被评估:

stub_dict[next(stub_generator)]

此外,将 stub_generator 放在 list 中将导致生成器被完全迭代并因此耗尽。当随后评估 next(stub_generator) 时,将引发 StopIteration 异常,因为 stub_generator 现在为空。


但是这段代码是不同的:

temp_1 = next(stub_generator)
temp_2 = list(stub_generator)

它将执行 next(stub_generator) before 执行 list(stub_generator)。这意味着,stub_generator 在转换为列表时仍会包含一些项目。

关于python - 将生成器分配给字典直接抛出 StopIteration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696319/

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