【发布时间】:2020-10-11 06:45:10
【问题描述】:
为什么会这样
a = (i for i in range(2))
b = a
c = a
for i in b:
print("ok")
next(c)
导致这个?
StopIteration Traceback (most recent call last)
<ipython-input-37-9c481bb09894> in <module>()
54 for i in b:
55 print("ok")
---> 56 next(c)
StopIteration:
我目前正在学习 Python 中的生成器。我的目标是将 a 设置为生成器,创建 a 的 b 和 c 实例,并分别使用 b 和 c。出了什么问题?
此外,当我使用 yield 而不是基于 () 的生成器 a 设置类似的函数时,一切都很顺利。
【问题讨论】:
-
b和c指向同一个生成器。您使用 for 循环使用生成器,使其 为空,因此在询问下一个时,您会遇到 StopIteration 错误 -
@azro 谢谢,到目前为止听起来很合理。因此,如果我使用带有 yield 而不是 () 的函数,它会起作用,因为它每次都单独调用函数,生成独立的对象,而在这里我只创建到原始对象的“链接”?
-
目标是创建新实例,您不需要
yieldrepl.it/repls/RemoteAdventurousDemoware -
@azro 有道理,感谢您的帮助和时间。