一、迭代器和生成器的定義
可迭代物件並不是指某一個資料型別,而是特指儲存了元素的一個容器物件。這裡的容器物件可以具象為:列表、字典、元組、字串、range都算是一個"容器"。可迭代物件有個方法叫_iter_()方法,翻譯過來叫做迭代。純可迭代物件的內部資料"所見即所得",可迭代的資料是已經看得見的資料了。
首先迭代器肯定是一個可迭代物件,迭代器擁有迭代物件的所有特徵。迭代器同時擁有__iter__()和__next__()方法。迭代器可以記住遍歷的位置(for 的工作核心之一)。迭代器是一個惰性機制,何為惰性。不叫我動,我不動,叫我,我才動。
生成器肯定是一個迭代器,也是一個可迭代物件,一邊迭代一邊生成資料。生成器有__iter__()和__next__()還有一個yield關鍵字/命令(類似return),生成器之所以能生成是因為儲存了一套演算法/邏輯可以持續生成資料,yield返回一個值,但是不會結束函式,會記住當前值的位置。