生成器:一邊迴圈一邊計算的機制,稱為生成器.
兩種表現形式:
1.生成器表示式,列表解析的形式,只要把乙個列表生成式的改成
()
,就建立了乙個generator:
s1 = [i for i in range(10)] #列表print
(s1)
s2 = (i for i in range(10)) #
生成器print
2.生成器函式;和常規的函式一樣,只是不用return而使用yield。yield相當於return,但功能有所差異,其一,yield一次返回乙個結果,並掛起函式,下一次呼叫(用next或__next__)從上一次掛起的位置繼續執行
.send() 和next()一樣,都能讓生成器繼續往下走一步(下次遇到yield停),但send()能傳乙個值,這個值作為yield表示式整體的結果
deftest():
yield 1
yield 2
print(test()) #
直接寫函式名並不會執行函式,而是返回乙個生成器
a = test() #
函式賦值給變數才會保持狀態
生長器函式的特點:需要才呼叫next,不需要不呼叫,記憶體不會卡
列表解析的形式
l=[1,2,3,4,]函式形式print(sum(l))#
一次性載入,耗記憶體,卡死
print(sum(i for i in range(50000000000000000000000)))#
需要才載入next,不會卡
importtime
deftest():
print('
開始生孩子了')
print('
開始生孩子了')
yield'我
'print('
開始生孩子了')
yield'兒子
'print('
開始生孩子了')
yield'孫子
生成器特點:
1是可迭代物件
2實現了延遲計算,省記憶體
3生成器比其他可迭代物件多了個延遲計算,節省記憶體的好處。
python基礎 生成器
生成器是根據某種演算法得出的一系列元素,需要用到該元素,才會生成出來,比列表節省記憶體空間。生成器相當於儲存演算法,授人以漁,列表之類的是授人以魚。第一種建立生成器的方法 1 gen x 2 for x in range 5 type gen 通過next 函式得到生成器的每個值 next gen ...
python基礎 生成器
生成器函式 def generator print 1 return a ret generator print ret 只要含有yield關鍵字的函式都是生成器函式 yield不能和return共用且需要寫在函式內 def generator print 1 yield a 生成器函式 執行之後會...
python 生成器作用 Python生成器
生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...