python 生成器模板例項介紹

2022-08-17 00:21:25 字數 903 閱讀 3158

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