python中的迭代器Iterator
迭代器是?來幫助我們記錄每次迭代訪問到的位置,當我們對迭代器使?next()函數的時候,迭代器會向我們返回它所記錄位置的下?個位置的數據。實際上,在使?next()函數的時候,調?的就是迭代器對象的??? __next__????法(Python3中是對象的??? __next__????法, Python2中是對象的next()?法)。所以,我們要想構造?個迭代器,就要實現它的??? __next__??? ?法。但這還不夠,python要求迭代器本身也是可迭代的,所以我們還要為迭代器實現??? __iter__????法,???? __iter__????法要返回?個迭代器,迭代器?身正是?個迭代器,所以迭代器的??? __iter__????法返回?身即可。
?個實現了??? __iter__????法和??? __next__????法的對象,就是迭代器。
| class??? MyList(object): ??????????? """?定義的?個可迭代對象""" ??????????????? ????????? def??? __init__(self): ???????????????????????????????? ??????????????????? self.items??? =??? [] def??? add(self,??? val): self.items.append(val) def??? __iter__(self): ??????????????????????????????? ??????????????????? myiterator??? =??? MyIterator(self)??????????????????????????????? ??????????????????? return??? myiterator |
| class??? MyIterator(object): ???????????? """?定義的供上?可迭代對象使?的?個迭代器""" ??????????????? ?????????? def??? __init__(self,??? mylist): ??????????????????????????????? ??????????????????? self.mylist??? =??? mylist #??? current?來記錄當前訪問到的位置 ???????????????????????????????? self.current??? =??? 0 def??? __next__(self): if??? self.current??? <??? len(self.mylist.items):??????????????????????????????????????????????? ??????????? item??? =??? self.mylist.items[self.current]????????????????????????????????????????????????????????????????????????????????????????? ??????????? self.current??? +=??? 1 ??????????????????????????????????????????????? ????????????? return??? item???????????????????????????????? else:??????????????????????????????????????????????? ???????????? raise??? StopIteration def??? __iter__(self): ?????????????????????????????? ????????? return??? self if??? __name__??? ==??? '__main__': mylist??? =??? MyList()??????????????? ????????? mylist.add(1)???????????????? ????????? mylist.add(2)???????????????? ????????? mylist.add(3)??????????????? ????????? mylist.add(4)??????????????? ????????? mylist.add(5)??????????????? ?for??? num??? in??? mylist: ?????????? print(num) |
如何判斷?個對象是否是迭代器
可以使??? ?isinstance()??? 判斷?個對象是否是??? Iterator???對象:
In??? [56]:??? from??? collections??? import??? Iterator
In???[57]:???isinstance([],??? Iterator)
Out[57]:??? False
In??? [58]:??? isinstance(iter([]),??? Iterator)
Out[58]:??? True
In??? [59]:??? isinstance(iter("abc"),???Iterator) Out[59]:???True
總結
以上是生活随笔為你收集整理的python中的迭代器Iterator的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中装饰器的参数与返回值
- 下一篇: python中随机输入数字再排序