python中的迭代器Iterator
来源:互联网 发布:xd是什么软件 编辑:程序博客网 时间:2024/06/07 23:18
迭代器是⽤来帮助我们记录每次迭代访问到的位置,当我们对迭代器使⽤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中的迭代器iterator和yield生成器(constructor)
- Python 迭代器(iterator)
- Python迭代器(Iterator)
- python的迭代器iterator
- python: 迭代器 (Iterator)
- Python iterator迭代器
- java中的Iterator迭代器
- Python中的Iterables, Iterator, Generators, Yield
- python中的iterator介绍及应用场景
- Learning Python : 3. iterator 迭代器
- Python之迭代器(iterator)
- Python学习笔记 - 迭代器Iterator
- python中使用迭代器 Iterator
- php中的iterator迭代器(遍历)
- java中的迭代器(Iterator)
- 【Python】在Python中自定义迭代器Iterator
- 说说Python中的iterator,yield表达式及generator,coroutine
- 详解科大讯飞语音识别
- 13爬楼梯问题
- L2-013. 红色警报
- VS2008-Addin开发-笔记
- 008讲字典与集合
- python中的迭代器Iterator
- DataBinding 使用方式
- 递归解决换零钱问题
- 严蔚敏 数据结构C语言 银行排队队列 离散事件模拟
- 结构体内存对齐
- L2-014. 列车调度
- 命令每天一小步--ls命令
- MyEclipse加载web工程Tomcat能跑,项目加载不出来
- 51nod 1276 岛屿的数量