转于:https://blog.csdn.net/whgqgq/article/details/63685066
博主:gongqi1992
iterable和iterator最基本的区别:
iterable是一个迭代器对象,包含一个__iter__或__getitem__方法,__iter__方法会返回一个iterator对象。通常可以使用isinstance(e,collection.Iterable)
方法判断一个对象e是否是可迭代的。__iter__方法需要返回一个iterator,也就是说这个方法需要被重写。例如:
class AIterable: def __iter__(self): return iter([1, 2, 3]) it = AIterable() for i in it: print("current item is: " + str(i))
运行结果为: current item is: 1
current item is: 2
current item is: 3
定义了一个iterable类,这个类含有一个__iter__方法,并且这个方法返回一个iterator。
*注:iter是Python的build-in函数,返回一个iterator。
iterator是一个可迭代对象。该对象的类必须实现next(Python2.x)或__next__(python3.x)方法。例如:
class AIterator: def __init__(self, s, e): self.current = s self.end = e def __iter__(self): return self def __next__(self): if self.current < self.end: self.index = self.current self.current += 1 return self.index else: raise StopIteration it = AIterator(1,10) for i in it: print(i,end=' ')运行结果为:
1 2 3 4 5 6 7 8 9
由此可见,当调用for…in循环时,当in后面的对象是一个iterator时,则运行next()方法直到遇到StopIteration异常。同样,对于iterable对象,则先调用__iter__方法返回一个iterator,执行之前的操作步骤即可。
for…in语句的等价实现:
for i in [1,2,3,4,5]: print(i,end=' ')
运行结果:1 2 3 4 5
上述代码等价于:
it = iter([1,2,3,4,5]) while True: try: print(next(it),end=' ') except StopIteration: break;运行结果:1 2 3 4 5
来源:https://www.cnblogs.com/volcao/p/8733008.html