迭代器本身是一个类 类必须有 构造函数:init( ) 迭代器必须有 返回下一个元素:next( ) 返回迭代器对象本身:iter( )

(self,是指向对象本身,与C++的this指针是类似的)

  1. class It_name(object):
  2. def __init__(self, x):
  3. self.x = x
  4. def __next__(self):
  5. self.x = self.x + 1
  6. if self.x >= 7:
  7. raise StopIteration
  8. else:
  9. return self.x
  10. def __iter__(self):
  11. return self
  12. IT = It_name(2)
  13. print( next(IT) )
  14. print( next(IT) )
  15. print( next(IT) )
  16. print( next(IT) )
  17. #=============================
  18. #output
  19. 3
  20. 4
  21. 5
  22. 6
  23. Traceback (most recent call last):
  24. File "E:\PythonApplication2.py", line 20, in <module>
  25. print( next(IT) )
  26. File "E:\PythonApplication2.py", line 8, in __next__
  27. raise StopIteration

init(self, x)

初始化对象(构造函数)

  1. def __init__(self, x):
  2. self.x = x # 将传入的参数x变成类成员属性self.f

next(self)

定义返回下一个元素的方法 (这个方法类似于for循环) next( )必须判断合适抛出StopIteration错误 next( )必须计算下一个元素,并且返回结果

  1. def __next__(self):
  2. self.x = self.x + 1 # 计算下一个元素
  3. if self.x >= 7: # 判断是否抛出"StopIteration"
  4. raise StopIteration
  5. else: # 返回结果
  6. return self.x

iter(self)

对象本身就是迭代器,所以返回自己

  1. def __iter__(self):
  2. return self

iter方法返回一个迭代器(Iterator)对象, next方法可供迭代调用不停生成下一个元素 for … in… 这个语句其实做了两件事。 第一件事是获得一个迭代器,即调用了iter()函数。 第二件事是循环的过程,循环调用next()函数。

  1. class It_name:
  2. def __init__(self, x):
  3. self.x = x
  4. def __next__(self):
  5. self.x = self.x + 1
  6. if self.x >= 7:
  7. raise StopIteration
  8. else:
  9. return self.x
  10. def __iter__(self):
  11. return self
  12. IT = It_name(2)
  13. for i in IT
  14. print(i)