python yield的简单理解
生活随笔
收集整理的這篇文章主要介紹了
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') StopIterationsend方法是給yield 一個返回值,但在沒做迭代直接調用send方法會報異常,每調用一次send方法相當于進行了一次迭代。如果通過調用next方法進行迭代,那么yield返回的是None
轉載于:https://my.oschina.net/u/351612/blog/1527681
總結
以上是生活随笔為你收集整理的python yield的简单理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业:怎样的渗透测试频率是合适的?
- 下一篇: 从直觉主义到量化分析 让大数据做主