2018-10-23 Python34 迭代器Iterator、生成器Generator yield

判斷一個(gè)對(duì)象是否可迭代:

In [6]: from collections import Iterable

In [7]: isinstance([], Iterable)
Out[7]: True

In [8]: isinstance({}, Iterable)
Out[8]: True

In [9]: isinstance("", Iterable)
Out[9]: True

In [10]: isinstance(100, Iterable)
Out[10]: False

?

迭代器

可以用next()獲取下一個(gè)值

In [20]: x = (i for i in range(10))

In [21]: next(x)
Out[21]: 0

In [22]: next(x)
Out[22]: 1

In [23]: next(x)
Out[23]: 2

In [24]: next(x)
Out[24]: 3

In [27]: isinstance(x, Iterator)
Out[27]: True

?

iter() 函數(shù)

可以將可迭代對(duì)象,變成迭代器:

In [30]: a = [11,22,33]

In [31]: isinstance(a, Iterator)
Out[31]: False

In [32]: iter(a)
Out[32]: <list_iterator at 0x7f0dee3abc50>

In [33]: b = iter(a)

In [34]: isinstance(b, Iterator)
Out[34]: True

In [35]: next(b)
Out[35]: 11

In [36]: next(b)
Out[36]: 22

In [37]: next(b)
Out[37]: 33

?

包含yield的函數(shù),是生成器

不會(huì)結(jié)束程序的return,是迭代器,能用next()取下一個(gè)值。

In [57]: type(x for x in range(10))
Out[57]: generator


In [59]: def gen(max):
   ....:     n = 0
   ....:     while n<max:
   ....:         yield n
   ....:         n+=1
   ....:         
In [60]: type(gen)
Out[60]: function
In [61]: type(gen(10))
Out[61]: generator
In [63]: for i in gen(10):
   ....:     print(i)
   ....:     
0
1
2
3
4
5
6
7
8
9

相當(dāng)于:

from collections import Iterator

class Gen(object):
    def __init__(self,max):
        self.max=max
        self.n=0

    def __iter__(self):
        return self

    def __next__(self):
        if self.n<self.max:
            tmp=self.n
            self.n+=1
            return tmp
        raise StopIteration


print(isinstance(Gen(10), Iterator) )
for i in Gen(10):
    print(i, end=' ')
True
0 1 2 3 4 5 6 7 8 9 
最后編輯于
?著作權(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)容

  • 把明天的公眾信息編輯好后,自己就看了一下自己的安排,看有哪些地方需要去優(yōu)化去完善的,后面自己發(fā)現(xiàn)完全沒有一個(gè)東西去...
    YI曦閱讀 179評(píng)論 0 0
  • 自律很重要。
    斐麗希婭閱讀 83評(píng)論 0 0
  • pyhton2和python3共存以后不能直接使用pip install + xxx ,這是因?yàn)閜yhton2的環(huán)...
    sunlin1234閱讀 584評(píng)論 0 0
  • 人生很吊詭的地方在于,你往往最心動(dòng)的時(shí)刻,都是在你沒有準(zhǔn)備好的時(shí)候遇到的,當(dāng)你準(zhǔn)備好一切時(shí),你卻很難找到當(dāng)時(shí)心動(dòng)的...
    江先森有點(diǎn)神閱讀 194評(píng)論 0 0

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