生成器例項

2022-09-11 03:30:12 字數 3042 閱讀 6772

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('

正在生產包子')

4yield

'包子%s

'%i5

print('

開始賣包子了')

6 bz_list =product_bz()

7print(bz_list.__next__

())8

#加**

9print(bz_list.__next__())

執行結果:

正在生產包子

包子0開始賣包子了

正在生產包子

包子1

人口普查:

1

##獲取某一地區的人口數

2def

get_population():

3 with open('

人口普查

','r

',encoding='

utf-8

') as f:

4for i inf:5

yieldi6

print

(get_population())

7 get_p =get_population()

8 s = (eval(get_p.__next__

()))

9print

(type(s))

10print(s['

population'])

執行結果:

23

process finished with exit code 0

#

#使用生成器迭代出所有城市的人口數

defget_population():

with open(

'人口普查

','r

',encoding='

utf-8

') as f:

for i in

f:

yield

iprint

(get_population())

get_p =get_population()

#print(get_p)

for p in

get_p:

p_dict =eval(p)

print(p_dict['

population

'])

執行結果:

23

13123

1212345

process finished with exit code 0

1

##計算總人口數

2def

get_population():

3 with open('

人口普查

','r

',encoding='

utf-8

') as f:

4for i inf:5

yieldi6

print

(get_population())

7 get_p =get_population()

8 all_pop = sum(eval(i)['

population

'] for i in

get_p)

9print(all_pop)

執行結果:

12516

process finished with exit code 0

1

#計算平均人口數 失敗

2def

get_population():

3 with open('

人口普查

','r

',encoding='

utf-8

') as f:

4for i inf:5

yieldi6

print(get_population())#

生成器7 get_p =get_population()

8 all_pop = sum(eval(i)['

population

'] for i in

get_p)

9print

(all_pop)

10for p in

get_p:

11print(eval(p)['

population

']/all_pop)#使用__next__()之後所有數字被遍歷完 計算平均數失敗

執行結果:

12516#計算失敗

process finished with exit code 0

def

test():

for i in range(4):

yield

it =test()

t1 = (i for i in

t)t2 = (i for i in

t1)print

(list(t1))

print(list(t2))#在這之前t1已經遍歷過 此時已經遍歷結束為空 列印出來空列表

執行結果:

[0, 1, 2, 3]

#之前被遍歷過 此時為空

process finished with exit code 0

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 ...

python生成器並行例項

生成器並行例項 send傳送值被yield接受到賦值給baozi變數 yield作用只是在這裡儲存這個值的當前狀態然後返回之後在呼叫next,又回到yield 單純呼叫next不會給yield傳值,next只是在呼叫yield,send是呼叫yield並且傳值 import time 協程def c...

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...