Python生成器以及應用例項解析

2022-10-04 20:18:29 字數 1473 閱讀 4831

本文研究的主要是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...