为什么生成器表达式这么叫?

Ric*_*cco 4 python terminology list-comprehension generator-expression dictionary-comprehension

一方面我们有

  • 列表理解 [x for x in range(10)]
  • 集合理解 {x for x in range(10)}
  • 字典理解 {x: x for x in range(10)}

另一方面我们有

  • 生成器表达式 (x for x in range(10))

为什么前三个表达式称为“理解”,而最后一个称为“表达式”?它们几乎以相同的方式表示,我猜它们也以非常相似的方式工作。这背后有什么微妙的原因吗?这只是为了好奇。

参考:

g.d*_*d.c 5

推导式产生新的对象,这些对象会for立即消耗内部循环。它们一旦运行就“完成”了。

生成器被懒惰地评估——它们立即返回,并返回一个稍后会产生单个值的对象。

  • 他们有不同的名字,因为他们做不同的事情。生成器只是生成值。推导式包含这些生成值的综合集合。 (6认同)
  • “表达式”基本上是任何有价值的东西。非常通用的编程术语。 (2认同)
  • 并非所有生成器都是(单个)表达式 - 您所说的“生成器表达式”是指充当生成器的单个表达式,将其与“生成器函数”区分开来,“生成器函数”由创建生成器的多个表达式组成。所有推导式都是表达式,因此“推导式表达式”是多余的。 (2认同)