Python生成器的缺点是什么?

4

大家都在讨论Python中使用生成器的好处。这是非常酷和有用的事情。但是没有人谈论它们的缺点。而面试官通常会利用这个漏洞。

除了这两个之外,使用生成器有什么其他缺点吗?

  1. 为了使生成器正常工作,您需要在内存中保留生成器函数的变量。
  2. 每次想要重复使用集合中的元素时,必须重新生成它。

与集合本身无需在内存中保留的好处相比,我不会称1为缺点。 - hek2mgl
2
这更多地涉及到使用正确的工具来完成正确的工作。除了在你试图实现什么的情况下,它并不全是关于加号或减号。 - jpp
1
我发现在调试中这可能会引起很多神秘问题...有时程序员可能想要检查/打印集合,但在此过程中将其耗尽。这导致了所谓的“调试中的错误”综合症。 - Reut Sharabani
不错 @ReutSharabani,这实际上是第二点的一个案例。 - Raymond Reddington
1个回答

8
  1. 对于生成器的工作,您需要在内存中保存生成器函数的变量。

但是您不必保留整个集合在内存中,因此通常这正是您想要做出的权衡决策。

  1. 每次您要重用集合中的元素时,都必须重新生成它。

生成器必须被重新创建,但集合不需要。因此,这可能不是一个问题。

本质上,这归结为Lazy vs Eager evaluation的讨论。你会以CPU开销为代价换取流式处理的能力(而不是使用Eager evalution批量处理)。如果使用Lazy方法,代码可能会变得更加复杂难懂,所以在性能和简单性之间可能存在平衡。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接