我有一个 generator
检查列表中某个条件的对象。这个程序适用于我的所有情况。
但我只想澄清一些关键点。
在我的程序中每当generator
yield
值 'No'
或 'Done'
控制迭代停止并调用 generator
与另一个论点。
这可能是一个愚蠢的问题,反正就是,每当generator
对象被产生并且我们停止在它旁边调用,该对象是否已被垃圾收集解决?或者当我们调用 generator
时,产生的对象是否正在被垃圾收集处理再次提出另一个论点。
请向我澄清 generator
会发生什么情况对象,如果我们停止调用 next()
在它之前提出 StopIteration
异常(exception)。当前generator
的持久执行点和变量会发生什么变化对象,当我们再次使用新参数调用生成器时。
最佳答案
我争论是否将其作为评论,因为我不是 Python 中 GC 实现细节的专家,但决定了一个答案,因为它似乎可能会有所帮助。
我认为它只会在您丢失对它的所有引用时才被垃圾收集,但这应该无关紧要,因为生成器通常用于避免在内存中存储内容,因此它们通常不是很大。我认为在它击中之前停止使用它很好StopIteration
.事实上,很多生成器从不调用 StopIteration
(例如,如果他们正在枚举一些无限级数),因此您应该停止调用 next
在许多情况下,在到达“结束”之前就可以了。
关于python - 如果我们在生成器对象引发 'StopIteration' 异常之前停止迭代会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61685623/