你所指的是Generator
Python。看一眼: -
请参阅文档: -Generator Expression
其中包含您发布的完全相同的示例
从文档中: -
生成器是用于创建迭代器的简单而强大的工具。它们像常规函数一样编写,但只要它们想要返回数据就使用 yield 语句。每次调用 next() 时,生成器都会从它停止的地方恢复(它会记住所有数据值以及最后执行的语句)
生成器类似于List Comprehension
您使用 withsquare brackets
而不是brackets
,但它们的内存效率更高。它们不会同时返回完整list
的结果,而是返回生成器对象。每当您next()
在generator
对象上调用时,生成器都会使用它yield
来返回下一个值。
List Comprehension
对于上面的代码看起来像: -
[x * x for x in range(10)]
您还可以在 for 末尾添加条件以过滤掉结果。
[x * x for x in range(10) if x % 2 != 0]
如果数字不能被 2 整除,这将返回numbers
1 到 5 范围内的乘以 2 的列表。
Generators
描述使用的示例yield
可以是:-
def city_generator():
yield("Konstanz")
yield("Zurich")
yield("Schaffhausen")
yield("Stuttgart")
>>> x = city_generator()
>>> x.next()
Konstanz
>>> x.next()
Zurich
>>> x.next()
Schaffhausen
>>> x.next()
Stuttgart
>>> x.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
所以,你看,每次调用都会next()
执行下一个yield()
in generator
。最后它抛出StopIteration
。