當前位置:成語大全網 - 書法字典 - python3自定義叠代器對象如何用next方法依次叠代。

python3自定義叠代器對象如何用next方法依次叠代。

Python 3.x和Python 2.x在語法細節上有很多不同,今天我在看Python核心編程的時候,談到了自定義叠代器對象。於是我打了源碼,原碼如下:

AnyIter類(對象):

def __init__(self,data,safe=False):

"""叠代器的初始化"""

自我安全=安全

self.iter = iter(數據)

def __iter__(self):

"""返回壹個叠代器"""

回歸自我

def next(self,count=1):

"""返回任意數量的元素"""

retval = []

對於範圍內的項目(計數):

嘗試:

retval.append(self.iter.next())

除了StopIteration:

如果自身安全:

破裂

否則:

再次引發# reraise異常

退貨

if __name__ == '__main__ ':

a = AnyIter(範圍(10),真)

b = iter(a)

對於範圍(1.5)內的項目:

打印(' {}:{} ')。格式(item,a.next(item))

我的機器上安裝了Python 3.3.2。當我在控制臺上運行這個腳本時,我直接拋出壹個異常類型錯誤:

據說iter()返回壹個非叠代器類型的對象。對比了壹下,沒發現什麽問題。於是我嘗試用Ipython(Python版本是2.7.5)運行代碼,得到了完美的結果。所以我考慮是不是版本。求助谷歌,在stackoverflow上找個帖子,找到關鍵原因:

於是上面代碼中所有調用next()的地方都換成了__next__(),最後代碼在控制臺上運行,正確得到了預期的結果:

查閱Python 3.3.2附帶的用戶手冊,得到如下結果:

問題解決了:Python核心編程用的是Python 2.x,版本差異造成了這種情況。妳還是要做,不然就分不清了。