根據規則迴圈生成資料,當條件不成立則生成資料結束,資料不是一次性全部生成出來,而是使用乙個生成乙個,可以節省大量記憶體.
1.生成器推導式
2.yield關鍵字
生成器推導式與列表推導式類似只不過生成器推導式使用小括號
my_generator=
(i *
10for i in
range(5
))print
(my_generator)
# next獲取生成器當下乙個值
value=
next
(my_generator)
print
(value)
# 遍歷生成器
for value in my_generator:
print
(value)
next函式獲取生成器中的下乙個值
for迴圈遍歷生成器中的每乙個值
只要在def函式裡看到有yield關鍵字就是生成器
def
defmygenerator
(n):
for i in
range
(n):
print
('開始生成'
)yield i
print
('完成一次'
)if __name__ ==
'__main__'
: g=mygenerator(2)
#result=next(g)
#print(result)
for i in g:
print
(i)
**說明:
1.**指定到yield會暫停,然後把結果返回去,下次啟動生成器會在暫停的位置繼續往下執行.
2.生成器如果把資料生成完成,再次獲取生成器中的下乙個資料會丟擲stoplteration異常,表示停止迭代異常
3.while迴圈內部沒有處理異常操作,需要手動新增處理異常操作
4.for迴圈內部自動處理了停止迭代異常,使用起來更加方便
python yield建立生成器
利用迭代器,我們可以在每次迭代獲取資料 通過next 方法 時按照特定的規律進行生成。但是我們在實現乙個迭代器時,關於當前迭代到的狀態需要我們自己記錄,進而才能根據當前狀態生成下乙個資料。為了達到記錄當前狀態,並配合next 函式進行迭代使用,我們可以採用更簡便的語法,即生成器 generator ...
建立生成器的兩種方式
一種利用列表推導式,一種利用yield 1 生成器 特殊的迭代器2 生成器的兩種創作方法3 一 4 list i 2for i in range 10 列表推導式5 print list,end 67 第一種建立生成器 利用列表推導式 8 list1 i 2for i in range 10 9pr...
生成器模式 建立英雄
builder 為建立乙個product物件的各個部件定義指定的抽象方法,並提供乙個返回該product的方法。concretebuilder 實現builder的介面以構造和裝配該產品的各個部件。director 導演類,用於指導具體構建者如何構建產品,控制呼叫先後次序,並向呼叫者返回完整的產品類...