转于: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