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