Python生成器是一種特殊的迭代器,它允許你在需要時才生成值,從而節(jié)省內(nèi)存并提高效率
yield
關(guān)鍵字:在定義生成器函數(shù)時,使用yield
關(guān)鍵字返回一個值。當(dāng)生成器函數(shù)被調(diào)用時,它返回一個生成器對象,而不是直接執(zhí)行函數(shù)體。當(dāng)生成器對象被迭代時,函數(shù)體將被執(zhí)行,直到遇到yield
關(guān)鍵字,此時函數(shù)將返回yield
后面的值,并暫停執(zhí)行。下次迭代時,函數(shù)將從暫停的地方繼續(xù)執(zhí)行,直到再次遇到yield
關(guān)鍵字。def simple_generator():
yield 1
yield 2
yield 3
gen = simple_generator()
for value in gen:
print(value)
for
循環(huán)迭代:生成器對象可以直接用于for
循環(huán)進(jìn)行迭代。def simple_generator():
yield 1
yield 2
yield 3
for value in simple_generator():
print(value)
next()
函數(shù)迭代:可以使用next()
函數(shù)獲取生成器對象的下一個值。當(dāng)生成器對象中沒有更多值時,next()
函數(shù)將引發(fā)StopIteration
異常。def simple_generator():
yield 1
yield 2
yield 3
gen = simple_generator()
while True:
try:
value = next(gen)
print(value)
except StopIteration:
break
send()
方法發(fā)送值:生成器對象還支持send()
方法,允許你在迭代過程中向生成器發(fā)送值。當(dāng)生成器接收到一個值時,它將在下一次yield
處返回該值。def simple_generator():
x = 0
while True:
value = yield x
if value is not None:
x = value
else:
break
gen = simple_generator()
print(next(gen)) # 輸出 0
print(gen.send(5)) # 輸出 5
print(next(gen)) # 輸出 5
通過這些方法,Python生成器可以實(shí)現(xiàn)高效的迭代,節(jié)省內(nèi)存并提高程序性能。