生成器
創建生成器的方式
- 生成器推導式
- yield關鍵字
生成器相關方法
- for:循環遍歷生成器中的每一個值
- next:獲取生成器中的下一個值
生成器注意點
- 代碼執行到yield會暫停,然后把結果返回出去,下次啟動生成器會在暫停的位置繼續執行下去
- 生成器如果把數據生成完成,再次獲取生成器中的下一個數據會拋出一個Stoplteration異常,表示停止迭代異常
- while循環內部沒有處理異常操作,需要自己寫代碼添加處理異常操作
- for循環內部自動處理了停止迭代異常
生成器推導式
a = (i for i in range(5))print(a)
單個取值?
a = (i for i in range(5))
print(next(a)) # 0
使用for循環遍歷生成器的每一個值
a = (i for i in range(5))
for i in a:print(i)# 0
# 1
# 2
# 3
# 4
yield關鍵字
yield生成器的特征,在def函數中看見了yield關鍵字,那么這個函數就叫做生成器
使用for循環
def demo(num):for i in range(num):yield ia = demo(5)
print(a)
for i in a:print(i)# <generator object demo at 0x000001FCC28F7648>
# 0
# 1
# 2
# 3
# 4
使用while循環
import sysdef demo(num):for i in range(num):yield ia = demo(5)while True:try:print(next(a))except StopIteration:sys.exit()# 0
# 1
# 2
# 3
# 4
生成器總結
- 生成器是根據算法生成數據的一種機制,每次調用生成器只生成一個值,可以節省大量的內存
- 生成器的創建方式有兩種:生成器推導式,yield關鍵字