本文研究的主要是python生成器及其應用,具體如下。
可以理解為一種資料型別,這種資料型別自動實現了迭代器協議(其他的資料型別需要呼叫自己內建的__iter__方法),所以生成器就是可迭代物件
1.生成器函式:常規函式定義,但是,使用yield語句而不是return語句返回結果。yield語句一次返回乙個結果,在每個結果中間,掛起函式的狀態,以便下次重它離開的地方繼續執行
yield的功能:
def func():
print('first')
yield 11111111
print('second')
yield 2222222
print('third')
yield 33333333
print('fourth')
g=func()
print(g)
from collections import iterator
print(isinstance(g,iterator)) #判斷是否為迭代器物件
print(next(g))
print('*****=>')
print(next(g))
print('*****=>')
print(next(g))
print('*****=>')
print(next(g))
for i in g: #i=iter(g)
print(i)
注:yield與return的比較?
2.生成器表示式:類似於列表推導,但是,生成器返回按需產生結果的乙個物件,而不是一次構建乙個結果列表
g=('egg%s' %i for i in range(10程式設計客棧00))
print(g)
print(next(g))
print(next(g))
print(next(g))
with open('a.txt',encoding='utf-8') as f:
# res=max((len(line) for line in f))
res=max(len(line) for line in f)
print(res)
print(max([1,2,3,4,5,6]))
with open('a.txt',encoding='utf-8') as f:
g=(len(line) for line in f)
print(max(g))
print(max(g))
print(max(g))
# [, ]檔案內容
#通過生成器表達器完成對檔案的讀完跟操作
with open(www.cppcns.com'db.txt',encoding='utf-8') as f:
info=[ for line in f if float(line.split()[1]) >= 3000ykunkcbhh0]
print(info)
Python生成器例項
在python中一邊迴圈一邊計算的機制,叫做生成器生成器是特殊的迭代器,同樣可以使用next 獲取下一位元素。例項1 for 迴圈實現 z x for x in range 10 print next z print next z print next z print next z 結果01 23 ...
生成器例項
1 defjidan 2for i in range 10 3yield 雞蛋 d i4 jd 生成器 自動實現迭代器協議 5 jd jidan 6print jd.next 7 print jd.next 包子問題 1 defproduct bz 2for i in range 10 3print...
python生成器並行例項
生成器並行例項 send傳送值被yield接受到賦值給baozi變數 yield作用只是在這裡儲存這個值的當前狀態然後返回之後在呼叫next,又回到yield 單純呼叫next不會給yield傳值,next只是在呼叫yield,send是呼叫yield並且傳值 import time 協程def c...