先上代码:
class Foo(object):
def __init__(self,data):
self.data = data
def __iter__(self):
return self
def __next__(self):
if self.data > 5:
raise StopIteration
self.data += 1
return self.data
f = Foo(3)
for i in f:
print(i) # 4,5,6
上述代码也等同于
class Foo(object):
def __init__(self,data):
self.data = data
def __next__(self):
if self.data > 5:
raise StopIteration
self.data += 1
return self.data
f = Foo(3)
for i in range(3):
print(f.__next__())
分析:
1、在遍历Foo的实例对象时,执行for...in...时,首先会先执行iter()方法,将此对象变为迭代器。
2、iter方法返回了一个迭代器对象,而后调用next()方法进行循环。
结论:
之所以列表、字典、元组可以进行for循环,是因为类型内部定义了 iter
相当于以下代码:
obj = iter([11,22,33,44])
for i in obj:
print i