python編程,一看就懂的代碼示例講解yield和生成器

摘要:本文主要通過代碼示例詳解yield和生成器、yield 對象、yield from 、next()和send()的區別。

python編程,一看就懂的代碼示例講解yield和生成器

一、yield和生成器

1.yield只能在函數中使用,yield一次返回一個結果。

2.當函數中包含yield時,在調用的時候不會馬上執行,而是返回一個生成器。

3.每次訪問生成器實時生成一個成員,不保留結果和狀態,因此當所有成員訪問結束時,再次訪問將拋出異常。

python編程,一看就懂的代碼示例講解yield和生成器

二、yield對象

python中一切都是對象,因此yield生成器、函數等等本質都是yield對象。

python編程,一看就懂的代碼示例講解yield和生成器

三、 yield from的使用

yield from 後面需跟一個迭代器。

python編程,一看就懂的代碼示例講解yield和生成器

等同於以下代碼:

python編程,一看就懂的代碼示例講解yield和生成器

四、next()和send()的區別。

python中兩者均可以訪問生成器,但區別很大。

next()可以指定默認的返回值,這樣生成器在stop之後不會拋出StopIteration異常。

python編程,一看就懂的代碼示例講解yield和生成器

send()必須給生成器傳遞一個對象,且只能傳遞一個對象,其中第一次必須傳遞None。

python編程,一看就懂的代碼示例講解yield和生成器

五、生成器的神奇之處

1. 極大的減少了對內存的佔用。

2. 可以實現協同作業,比如爬蟲框架scrapy中處處yield。

六、小結

yield和生成器是python獨特的功能,在大文件、網絡傳輸、遞歸、多線程等有強大作用。


分享到:


相關文章: