我們已經明白生成器內部的結構,其實就是通過像函式這樣的東西實現的!
多執行緒和單執行緒:簡單來說多執行緒就是並行運算,單執行緒就是序列運算
第一步:生成乙個生成器
第二步:執行第乙個next方法,開始呼叫函式,執行到yield時中斷,把返回值返回給變數(moon_cake):
下面有next有幾次執行幾次這樣的返回,但是返回的值是none
從上面可以看出send()和__next__()方法的區別:
1.__next__()只是呼叫這個yield,也可以說成是喚醒yield,但是不不會給yield傳值。
2.send()呼叫這個yield或者說喚醒yield同時,也活給yield傳乙個值。
3.使用send()函式之前必須使用__next__(),因為先要中斷,當第二次呼叫時,才可傳值。
為什麼給吃月餅的人傳值時,必須先執行__next__()方法?
如果不執行乙個__next__()方法,只是把函式變成乙個生成器,你只有__next__()一下,才能走到第乙個yield,然後就返回了,呼叫下乙個send()傳值時,才會發月餅.
上面 noon_cakes()開始執行時,
單執行緒通過生成器可以進行並行效果,原理(實際上還是序列的,但是因為我在不同的角色之間進行切換,並且因為執行速度特別快,你感覺上是並行的)
以後還會具體講協程,這裡只是提一下,協程還是很牛x的.
小白的Python之路 day4 迭代器
學習前,我們回想一下可以直接作用於for迴圈的資料型別有以下幾種 1.集合資料型別,如list tuple dict set str等 2.是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable.可迭...
小白的Python之路 day4 軟體目錄結構規範
設計專案目錄結構 就和 編碼風格 一樣,屬於個人風格問題。對於這種風格上的規範,一直都存在兩種態度 一類同學認為,這種個人風格問題 無關緊要 理由是能讓程式work就好,風格問題根本不是問題。另一類同學認為,規範化能更好的控制程式結構,讓程式具有更高的可讀性。我是比較偏向於後者的,因為我是前一類同學...
獻給小白的筆記day4
for 初始化語句 迴圈條件語句 迭代語句 for語句執行流程 while 迴圈條件語句 do while 迴圈條件語句 do while語句執行流程,先執行迴圈語句,再判斷條件,true繼續執行,false結束迴圈 break continue break 破壞整個迴圈 continue 跳過本次...