4.3 我們想實(shí)現(xiàn)一個自定義的迭代模式,來區(qū)別常見的內(nèi)建函數(shù)range reversed函數(shù)等
- 可以使用生成器函數(shù),來實(shí)現(xiàn)一種新的迭代
>>> def frange(start,stop,increment):
... x = start
... while x < stop:
... yield x
... x+=increment
>>> for n in frange(0,4,0.5):
... print(n)
...
0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
>>> list(frange(0,1,0.125))
[0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875]
>>>
- 函數(shù)中只要出現(xiàn)了yield函數(shù),就會變成一個生成器,與普通函數(shù)不同,生成器只有再響應(yīng)了迭代操作時才運(yùn)行,下面研究下他的機(jī)制
>>> def c(n):
... print('starting to count form',n)
... while n >0:
... yield n
... n -=1
... print('done')
...
>>> c =c(3)
>>> c
<generator object c at 0x104beff50>
>>> next(c)
starting to count form 3
3
>>> next(c)
2
>>> next(c)
1
>>> next(c)
done
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
- 這里函數(shù)的核心特性就是,在響應(yīng)了迭代過程的next時才會運(yùn)行,一旦生成器的函數(shù)返回,迭代也就停止了。
- 但是通常情況下for自帶就處理了這些過程,不用再單獨(dú)處理結(jié)束的返回
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。