python生成器並行例項

2022-07-13 10:09:08 字數 1800 閱讀 5035

生成器並行例項:

send傳送值被yield接受到賦值給baozi變數

#yield作用只是在這裡儲存這個值的當前狀態然後返回之後在呼叫next,又回到yield

#單純呼叫next不會給yield傳值,next只是在呼叫yield,send是呼叫yield並且傳值

import time

#協程def consumer(name):

print(

"%s 準備吃包子啦!

" %name)

while

true:

baozi = yield

#send傳送值被yield接受到賦值給baozi變數

#yield作用只是在這裡儲存這個值的當前狀態然後返回之後在呼叫next,又回到yield

#單純呼叫next不會給yield傳值,next只是在呼叫yield,send是呼叫yield並且傳值

print(

"包子[%s]來了,被[%s]吃了!

" %(baozi,name))

# c = consumer("

dapangxiaozi")

# c.__next__()

# c.send(

"韭菜餡")

# c.__next__()

# def producer(name):

# c = consumer('a'

) #只是變成生成器

# c2 = consumer('b'

)# c.__next__()

# c2.__next__()

# print(

"老子開始準備做包子啦!")

#

for i in range(10

):# time.sleep(1)

# print(

"做了2個包子!")

# c.send(i)

# c2.send(i)

## producer(

"alex")

def producer(name):

c= consumer("a"

) c2 = consumer("b"

) c.__next__()

c2.__next__()

print(

"開始吃包子了!")

for i in range(10

): time.sleep(1)

print(

"%s做了1個包子

"%name)

c.send(i)

c2.send(i)

producer(

"alex

")

迭代器:

*可以被next()函式呼叫並不斷返回下乙個值的物件稱為迭代器:iterator

我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種:

一類是集合資料型別,如list、tuple、dict、set、str等;

一類是generator,包括生成器和帶yield的generator function。

這些可以直接作用於for迴圈的物件統稱為可迭代物件:iterable。

可以使用isinstance()判斷乙個物件是否是iterable物件:

*可以被next()函式呼叫並不斷返回下乙個值的物件稱為迭代器:iterator

*生成器一定是迭代器

*可迭代物件加上iter()就可以變成迭代器

python生成器並行

生成器並行 import time defconsumer name print s 準備吃包子啦 name while true baozi yield print 包子 s 來了,被 s 吃了 baozi,name c consumer abc c.next b1 韭菜餡 c.send b1 s...

生成器並行

生成器的作用的在單執行緒下實現並行,稱為攜程,比執行緒更小的單位,依附於執行緒 def customer name print s準備吃包子了 name while true baozi yield 生成器 print s吃了 s包子 name,baozi def producer c1 custo...

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