日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python yield的简单理解

發布時間:2025/3/20 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python yield的简单理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

yield是個生成器,它可以使一個方法變成可迭代的方法,每次迭代返回yield后面的值

簡單理解:

>>>def t1():yield 1yield 2yield 3>>> t = t1(); >>> t.__next__() 1 >>> t.__next__() 2 >>> t.__next__() 3#又或者 >>> for v in t1():print(v)1 2 3 #注意:t1().__next__()這只會永遠都返回1,因為每次都迭代了這個方法的不同實例 >>> t1().__next__() 1 >>> t1().__next__() 1 >>> t1().__next__() 1 >>>

從上面可以看出實例化這個方法后,每次調用他的__next__()方法都返回yield后面的值

進一步

>>> def t2():yield 1print('hello1')yield 2print('hello2')yield 3print('hello3')>>> t = t2() >>> t.__next__() 1 >>> t.__next__() hello1 2 >>> t.__next__() hello2 3 >>> t.__next__() hello3 Traceback (most recent call last):File "<pyshell#72>", line 1, in <module>t.__next__() StopIteration >>>

第一次執行next方法后,該方法只運行到 第一個yield后次方法就暫停執行了,直到再次調用該實例的next方法才會繼續往下執行直到遇到下一個yield,該實例調用到第四次next方法后會繼續往下執行,同時會拋出一個異常,表示該方法已經迭代完成了

對于send方法的理解:

>>> def t3():m = yield 1print('send1 value is ',m)n = yield 2print('send2 value is ',n)k = yield 3print('send2 value is ',k)>>> t = t3() >>> t.send('one')#t.send(None)則不會報異常 Traceback (most recent call last):File "<pyshell#86>", line 1, in <module>t.send('one') TypeError: can't send non-None value to a just-started generator >>> t.__next__() 1 >>> t.send('one') send1 value is one 2 >>> t.__next__()# 返回None send2 value is None 3 >>> t.send('three') send2 value is three Traceback (most recent call last):File "<pyshell#90>", line 1, in <module>t.send('three') StopIteration

send方法是給yield 一個返回值,但在沒做迭代直接調用send方法會報異常,每調用一次send方法相當于進行了一次迭代。如果通過調用next方法進行迭代,那么yield返回的是None

轉載于:https://my.oschina.net/u/351612/blog/1527681

總結

以上是生活随笔為你收集整理的python yield的简单理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。