Python生成器是一種特殊的迭代器,它允許你在需要時生成值,而不是一次性生成所有值
yield
關(guān)鍵字:在定義生成器函數(shù)時,使用yield
關(guān)鍵字而不是return
關(guān)鍵字來返回一個值。當生成器函數(shù)被調(diào)用時,它返回一個生成器對象,但不會立即執(zhí)行函數(shù)體。當生成器對象被迭代時,函數(shù)體將被執(zhí)行,直到遇到yield
關(guān)鍵字,此時函數(shù)將返回yield
后面的值,并暫停執(zhí)行。下次迭代時,函數(shù)將從暫停的地方繼續(xù)執(zhí)行,直到再次遇到yield
關(guān)鍵字。def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
print(next(gen)) # 輸出 1
print(next(gen)) # 輸出 2
print(next(gen)) # 輸出 3
for
循環(huán):使用for
循環(huán)迭代生成器對象可以確保每次迭代都獲取一個新的值,而不是一次性獲取所有值。這樣可以避免內(nèi)存不足的問題,特別是在處理大量數(shù)據(jù)時。def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
for value in gen:
print(value) # 依次輸出 1、2、3
next()
函數(shù):通過調(diào)用生成器對象的next()
方法,可以逐個獲取生成器中的值。當生成器中沒有更多值時,next()
方法將引發(fā)StopIteration
異常,你可以使用try-except
語句來處理這種情況。def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
try:
while True:
value = next(gen)
print(value) # 依次輸出 1、2、3
except StopIteration:
pass
通過以上方法,Python生成器可以確保在迭代過程中準確地生成和返回值。