含yield的函式的執行過程

2021-09-25 16:44:36 字數 2063 閱讀 1635

最近在了解python中的生成器,今天主要目的是闡述單執行緒實現並行效果,程式的執行過程。例子是廚師李老頭做一道菜,張

三、李四、王五三個臭小子就吃一道菜,使程式不斷穿梭在做菜,吃菜兩個程式中。

一、**

import time

def consumer(name):

print("%s喊你來吃炒菜了"%name)

while true:

chaocai = yield

print(「炒菜%s來了,被%s吃了」%(chaocai,name))

def producer(name):

#準備好吃貨們

c1 = consumer(「張三」)

c2 = consumer(「李四」)

c3 = consumer(「王五」)

c1.next()

c2.next()

c3.next()

#老李頭開始熬菜了

print("準備好各個配菜,開始往鍋裡放了")

for i in range(10):

time.sleep(1)

print("做好了一道菜")

c1.send(i)

c2.send(i)

c3.send(i)

producer(「李老頭」)

二、執行結果

三、主要知識點和執行過程

(1)主要知識點

通過yield實現在單執行緒下實現併發效果,yield返回當前位置的值。

生成器只能通過next的方法獲取generator的下乙個返回值;

send()方法可以喚醒yield並強行給yield進行傳值,next只能喚醒yield。

(2)**執行過程

a.python直譯器先逐行進行解析consumer、producer函式

b.執行producer(),跳轉到producer函式中

c.生成三個生成器,準備跳轉至consumer函式中

d.consumer中執行函式,遇yield準備返回producer中

重複張三的過程,在consumer和producer中穿梭著,李四和王五,如下:

e.開始for迴圈,並準備返回consumer中

f.回到上次c1中斷的斷點處,繼續執行

張三執行完,返回斷點處,準備跳回producer中

g.producer中調到c2,c3,重複c1的f過程

h.跳回producer中繼續for迴圈

最後實現,李老頭做一道菜,就被張

三、李四、王五馬上嘗了個遍。

函式的執行過程

1.通過函式名字找到函式入口 2.給形參分配空間 3.傳值 4.執行函式體語句 5.返回,釋放空間。include void func char ptr int main int argc,char argv 讀者認為輸出的結果是什麼?輸出結果為 hello world 函式的本來意圖是讓字串從e往...

超詳細的生成器的執行過程,yield的作用

前言 在python中,一邊迴圈一邊計算的機制,稱為生成器 generator 可以大大的節省記憶體空間。如果得到乙個生成器呢?這是列表推導式 list1 x for x in range 10 print list1 而想要得到乙個生成器,只要將兩邊的 換成 即可 g x 3 for x in r...

DoModal函式的執行過程

domodal函式的執行過程 這是我觀察mfc源 得出的結論 1 載入對話方塊資源 2 使父視窗失去焦點 3 建立對話方塊視窗 4 執行對話方塊的訊息迴圈 5 退出訊息迴圈,隱藏對話方塊視窗 大小及位置 0,0,0,0 6 使父視窗重新獲得焦點 6 呼叫destroywindow銷毀對話方塊視窗。7...