1defjidan():
2for i in range(10):
3yield
'雞蛋%d
' %i4#
jd:生成器 自動實現迭代器協議
5 jd =jidan()
6print(jd.__next__
())7
print(jd.__next__())
包子問題:
1defproduct_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
(get_population())
7 get_p =get_population()
8 s = (eval(get_p.__next__
()))
9print
(type(s))
10print(s['
population'])
執行結果:
23process 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
'])
執行結果:
2313123
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
(get_population())
7 get_p =get_population()
8 all_pop = sum(eval(i)['
population
'] for i in
get_p)
9print(all_pop)
執行結果:
12516process 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
deftest():
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,執行後返回...