gpt4 book ai didi

python - 屈服于... in

转载 作者:行者123 更新时间:2023-12-04 09:45:57 25 4
gpt4 key购买 nike

我遇到了一些这样的代码:

def func(tree):
nodes = tree
for node in nodes:
yield node
nodes += [42]

gen = func([-42, 3, 1, 4, 159])

for i in range(10):
print(next(gen))

此代码是否具有未定义的行为?

具体来说,是否:
for node in nodes:
yield node
nodes += [42]

显示未定义的行为?

我知道:
for node in nodes:
# yield node
nodes += [42]

可能会导致意外行为,因为我们正在迭代的变量 ( nodes) 正在 for 循环中更新。

最佳答案

不,为什么行为是未定义的?

生成器从 tree 参数产生所有原始元素,然后 42到无穷远。

>>> gen = func([1, 2, 3])
>>> next(gen)
1
>>> next(gen)
2
>>> next(gen)
3
>>> next(gen)
42
>>> next(gen)
42
>>> next(gen)
42

扩展 nodes[42]对于每个 yield 确保生成器永远不会用完要屈服的数字。

唯一的问题是,如果您调用 next足够多的时间你会遇到 MemoryError因为 nodes变得太大了。

关于python - 屈服于... in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62108490/

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