你指的是Python中的Generator
。看看: -
參見文檔: - Generator Expression
包含正是你已經張貼
從文檔相同的例子: -
生成器是創建迭代器的簡單而強大的工具。他們 是像常規函數一樣編寫的,但是隻要他們想返回數據就使用yield語句 。接下來的每次()被調用時, 發電機暫停處繼續關閉(它記憶所有的數據值 和語句最後執行)
發電機是類似於你square brackets
而不是使用List Comprehension
brackets
,但它們更有記憶效率。它們不會同時返回結果的完整list
,但它們會返回生成器對象。無論何時調用generator
對象上的next()
,生成器都使用yield
返回下一個值。
List Comprehension
上面的代碼看起來像: -
[x * x for x in range(10)]
您還可以添加條件,在爲年底篩選出的結果。
[x * x for x in range(10) if x % 2 != 0]
這將在範圍爲1返回乘以2的numbers
列表到5,如果數量不能被2整除。
描繪了使用yield
的Generators
一個例子可以是: -
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()
每次調用執行generator
下一個yield()
。最後它拋出StopIteration
。
發電機和還列表解析,這看起來非常相似:'[X * X爲在範圍X(10)]'。還可以包括篩選出的結果的條件:'[X * X爲如果x%2 == 0或x%3 == 0在範圍(10)X]'。 –