1. 程式人生 > >Python學習之迭代器和生成器

Python學習之迭代器和生成器

那麼首先什麼是迭代器和生成器呢?

迭代器即迭代的工具,那麼什麼又是迭代呢?所謂迭代:迭代是一個重複的過程,每次重讀即一次迭代,並且每次迭代的結果都是下一次迭代的初始值。例:

l=[1,2,3]
count=0
while count < len(l): 
    print(l[count])
    count+=1

重點:

  一、可迭代物件

    可迭代物件值得是內建有__iter__方法的物件,例:

'hello'.__iter__
(1,2,3).__iter__
[1,2,3].__iter__

  二、迭代器物件

可迭代物件執行__iter__()的到結果就是迭代器物件,迭代器物件既內建__iter__又__next__方法的物件。迭代器的使用,例:

dic={'a':1,'b':2,'c':3}
iter_dic=dic.__iter__() 

print(iter_dic.__next__()) #等同於next(iter_dic)
print(iter_dic.__next__()) #等同於next(iter_dic)
print(iter_dic.__next__()) #等同於next(iter_dic)
print(iter_dic.__next__()) #丟擲異常StopIteration,或者說結束標誌

  三、生成器

所謂生成器:在 Python 中,使用了 yield 的函式被稱為生成器(generator)。跟普通函式不同的是,生成器是一個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。呼叫一個生成器函式,返回的是一個迭代器物件。例:

def func():
    print('====>first')
    yield 1
    print('====>second')
    yield 2
    print('====>third')
    yield 3
    print('====>end')
g=func()
print(g)