第十三天python3 生成器yield

2022-06-14 19:00:10 字數 1369 閱讀 8431

生成器generator

生成器指的是生成器物件,可由生成器表示式得到,也可以使用yield關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件;

生成器函式

函式體中包含yield語句的函式,返回生成器物件;

生成器物件,是乙個可迭代物件,是乙個迭代器;

生成器物件,是延遲計算,惰性求值的;

yield生成器示例:

生成器表示式示例:

普通的函式呼叫fn(),函式會立即執行完畢,但是生成器函式可以使用next函式多次執行;

生成器函式等價於生成器表示式,只不過生成器函式更複雜;

生成器舉例:

如上圖所示:在生成器中,使用多個yield語句,執行一次後會暫停執行,把yield表示式的值返回,再次執行會執行到下乙個yield語句;return語句依然可以終止函式執行,但是return語句的返回值不能被獲取到;return會導致無法繼續獲取下乙個值,丟擲stopiteration異常;如果函式沒有顯示return語句,如果生成器函式執行到結尾,一樣會丟擲stopiteration異常;

生成器應用

協程coroutine

生成器的高階用法,比程序、執行緒輕量級,是在使用者空間排程函式的一種實現,pyton3 asyncio就是協程實現,已經加入到標準庫;python3.5使用async、await關鍵字直接原生支援攜程;

協程排程器實現思路:

1、有兩個生成器a、b

2、next(a)後,a執行到了yield語句暫停,然後去執行next(b),b執行到yield語句也暫停,然後再次呼叫next(a),再呼叫next(b);周而復始,就實現了排程的效果;

3、可以引入排程的策略來實現切換的方式;

協程是一種非搶占式排程;

處理遞迴問題:

yield from是python 3.3出現的新語法,yield from iterable 是for item in iterable:yield item形式的語法糖;

從可迭代物件中乙個個拿元素;

python3生成器 Python3 生成器

python3 生成器 閱讀 125 發布於 2020 05 19 14 29 25 在python中,一邊迴圈一邊計算出元素的機制,稱為生成器 generator。生成器的優點 一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。提高 可讀性...

學習Python 第十三天

二叉樹 一,名詞 根邊 樹葉 葉子 沒有兒子 兄弟 具有相同父親的節點 祖父和孫子 路徑路徑的長 深度 從根到該點 高 從該點到葉子 祖先 後裔 真祖先 真後裔 二,樹的實現 class treenode def init self,data,firstchild,nextsibling self....

PYTHON小白 第十三天

python小白 第十三天 1 類和物件 類是物件導向的重要內容,可以把類當成一種自定義型別,可以使用類來定義變數,也可以使用類來建立物件。1.1 定義類 在物件導向的程式設計過程中有兩個重要概念 類 class 和物件 object,也被稱為例項,instance 其中類是某一批物件的抽象,可以把...