迭代器本身是一个类 类必须有 构造函数:init( ) 迭代器必须有 返回下一个元素:next( ) 返回迭代器对象本身:iter( )
(self,是指向对象本身,与C++的this指针是类似的)
class It_name(object):
def __init__(self, x):
self.x = x
def __next__(self):
self.x = self.x + 1
if self.x >= 7:
raise StopIteration
else:
return self.x
def __iter__(self):
return self
IT = It_name(2)
print( next(IT) )
print( next(IT) )
print( next(IT) )
print( next(IT) )
#=============================
#output
3
4
5
6
Traceback (most recent call last):
File "E:\PythonApplication2.py", line 20, in <module>
print( next(IT) )
File "E:\PythonApplication2.py", line 8, in __next__
raise StopIteration
init(self, x)
初始化对象(构造函数)
def __init__(self, x):
self.x = x # 将传入的参数x变成类成员属性self.f
next(self)
定义返回下一个元素的方法 (这个方法类似于for循环) next( )必须判断合适抛出StopIteration错误 next( )必须计算下一个元素,并且返回结果
def __next__(self):
self.x = self.x + 1 # 计算下一个元素
if self.x >= 7: # 判断是否抛出"StopIteration"
raise StopIteration
else: # 返回结果
return self.x
iter(self)
对象本身就是迭代器,所以返回自己
def __iter__(self):
return self
iter方法返回一个迭代器(Iterator)对象, next方法可供迭代调用不停生成下一个元素 for … in… 这个语句其实做了两件事。 第一件事是获得一个迭代器,即调用了iter()函数。 第二件事是循环的过程,循环调用next()函数。
class It_name:
def __init__(self, x):
self.x = x
def __next__(self):
self.x = self.x + 1
if self.x >= 7:
raise StopIteration
else:
return self.x
def __iter__(self):
return self
IT = It_name(2)
for i in IT
print(i)