def create_num(all_num):print('---1---')
a, b = 0, 1
current_num = 0
while current_num < all_num:
print('---2---')
yy = yield a # 如果函式中 有yield 語句,那麼就不再是函式了,而是乙個生成器模板
print(yy)
print('---3---')
a, b = b, a + b
current_num += 1
obj = create_num(10) # 如果呼叫函式時,發現函式內有 yield 語句, 那麼這個就不是函式,而是乙個生成器
print(type(obj)) #
ret = next(obj) # 進行到yeild 停止執行
print(ret)
# 結果如下
# ---1---
# ---2---
# 0ret = next(obj) # 然後從上次停止的地方執行
print(ret)
# 結果如下
# none # next 不可以對 yield a 的結果進行賦值
# ---3---
# ---2---
# 1ret = obj.send('測試')
# send 可以對 yield a 的結果進行賦值
# (注釋:第一次執行生成器時,假如用send方法會報錯,因為沒有地方存放值,可以把變數改為nono,或者用next方法)
print(ret)
# 結果
# 測試
# ---3---
# ---2---
# 1
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...