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,版本差異造成了這種情況。妳還是要做,不然就分不清了。