Python中的iterator、iterable、generator
剛接觸Python的時候著實為iterator、iterable、generator所困擾 且一開始從官網下載安裝的就是Python3,但在摸索的過程中又看到了許多Python2的文章 剛開始哪搞得清楚Python2與Python3的差別,試了許多Python2的範例常常都行不通 從C++轉過來的我又對Python的duck typing非常地不能理解與適應 讓我不禁納悶想問:是誰說Python簡單的呀? 以下先總結我對這些名詞的認知(本篇文章內容都是針對Python3): iterable :中文翻作可迭代物,通常是一個容器、iterable實作__iter__方法回傳一個參考到此容器內部的iterator iterator :中文翻作迭代器、iterator pattern在Python中的實作,為序列或容器型態提供一相同的介面讓客戶端可遍歷(iterate over)容器內的元素,iterator實作了__next__與__iter__方法,方別供next與iter函式呼叫,每個iterator同時也 是 一個iterable generator :中文翻作產生器,是由包含yield敘述的函式或產生器表達式(簡稱genexp)所產生,支援所有iterator的操作以及額外的send方法,客戶端可透過send方法與generator溝通、影響其內部狀態 先舉個簡單的例子,請看以下的程式碼: >>>a=[1,2] >>>b=iter(a) >>>c=iter(b) >>>c is b True >>>next(b) 1 >>>next(b) 2 >>>next(b) Traceback (most recent call last): File " ", line 1, in next(b) StopIteration 從上面的例子我們就可以弄懂iterable與iterator的分別了 iterable指的就是容器 本身 ,將iterable傳進iter函式可以得到一個iterator iterator的操作非常簡單,透過next函式可以不斷取出下一個元素,抵達尾端時會