python 生成器

生成器

在Python中,這種一邊循環(huán)一邊計(jì)算的機(jī)制,稱為生成器:generator。

創(chuàng)建生成器方法1

要?jiǎng)?chuàng)建一個(gè)生成器,有很多種方法。第一種方法很簡(jiǎn)單,只要把一個(gè)列表生成式的 [ ] 改成 ( )
可以用next(list)打印出來(lái)

In [18]: l = [x for x in range(5)]

In [19]: l
Out[19]: [0, 1, 2, 3, 4]

In [20]: l = (x for x in range(5))

In [21]: l
Out[21]: <generator object <genexpr> at 0x7f92fadaed58>
In [22]: next(l)
Out[22]: 0

In [23]: next(l)
Out[23]: 1

In [24]: next(l)
Out[24]: 2

In [25]: next(l)
Out[25]: 3

In [26]: next(l)
Out[26]: 4

In [27]: next(l)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-27-101c36968c6d> in <module>()
----> 1 next(l)

創(chuàng)建生成器方法2

著名的斐波拉契數(shù)列(Fibonacci),除第一個(gè)和第二個(gè)數(shù)外,任意一個(gè)數(shù)都可由前兩個(gè)數(shù)相加得到:

In [28]: def fib(times):
   ....:     n = 0
   ....:     a,b = 0,1
   ....:     while n<times:
   ....:         print(b)
   ....:         a,b = b,a+b
   ....:         n+=1
   ....:     return 'done'
   ....: 

In [29]: fib(5)
1
1
2
3
5
Out[29]: 'done'

In [30]: def fib(times):
   ....:     n = 0
   ....:     a,b = 0,1
   ....:     while n<times:
   ....:         yield b
   ....:         a,b = b,a+b
   ....:         n+=1
   ....:     return 'done'
   ....: 

In [31]: F = fib(5)

In [32]: next(F)
Out[32]: 1

In [33]: next(F)
Out[33]: 1

In [34]: next(F)
Out[34]: 2

In [35]: next(F)
Out[35]: 3

In [36]: next(F)
Out[36]: 5

In [37]: next(F)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-37-8c2b02b4361a> in <module>()
----> 1 next(F)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.什么是生成器 通過(guò)列表生成式,我們可以直接創(chuàng)建一個(gè)列表。但是,受到內(nèi)存限制,列表容量肯定是有限的。而且,創(chuàng)建一...
    一只寫程序的猿閱讀 1,039評(píng)論 0 4
  • 我們可以通過(guò)列表生成式簡(jiǎn)單直接地創(chuàng)建一個(gè)列表,但是受到內(nèi)存限制,列表容量肯定是有限的。而且,創(chuàng)建一個(gè)包含100萬(wàn)個(gè)...
    PyChina閱讀 2,906評(píng)論 0 3
  • 生成器 通過(guò)列表生成式,我們可以直接創(chuàng)建一個(gè)列表。但是,受到內(nèi)存限制,列表容量肯定是有限的。而且,創(chuàng)建一個(gè)包含10...
    ztfdeveloper閱讀 179評(píng)論 0 1
  • 通過(guò)列表生成式,我們可以直接創(chuàng)建一個(gè)列表。但是,受到內(nèi)存限制,列表容量肯定是有限的。而且,創(chuàng)建一個(gè)包含100萬(wàn)個(gè)元...
    SevenBy閱讀 19,722評(píng)論 0 0
  • 1.生成器(generator)概念 生成器是迭代器,生成器提供了非常方便的自定義迭代器的途徑,在Python中,...
    Pello_Luo閱讀 893評(píng)論 0 0

友情鏈接更多精彩內(nèi)容