可迭代对象和迭代器.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # -*- coding: UTF-8 -*-
  2. # 迭代器(iterator)
  3. l2 = [1,2,3]
  4. "__iter__" in dir(l2) # 可迭代对象
  5. l2_iter = iter(l2)
  6. l2_iter.__next__() # 迭代器
  7. # import dis
  8. # li = [1,2]
  9. # dis.dis("for i in li: print(i)") #
  10. """
  11. 什么是迭代器,它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,
  12. 任何实现类__iter__ 和 __next__() ( python2中实现next() )方法的对象都是迭代器,
  13. __iter__ 返回迭代器自身,__next__返回容器中的下一个值,如果容器中没有更多元素类,
  14. 则会抛出 StopIteration 异常
  15. ==============================================
  16. 迭代器有一个内部状态的字段,用于记录下次迭代返回的结果,
  17. 它实现了 __next__ 和 __iter__ 方法,
  18. 迭代器不会一次性把所有的元素加载到内存,而是需要的时候才生成,并返回结果
  19. """
  20. #======================= 示例 =========================#
  21. # 迭代器对象可以使用常规for语句进行遍历:
  22. # 实例(Python 3.0+)
  23. #!/usr/bin/python3
  24. list=[1,2,3,4]
  25. it = iter(list) # 创建迭代器对象
  26. for x in it:
  27. print (x, end=" ")
  28. #======================= 使用 next() =========================#
  29. #!/usr/bin/python3
  30. import sys # 引入 sys 模块
  31. list=[1,2,3,4]
  32. it = iter(list) # 创建迭代器对象
  33. while True:
  34. try:
  35. print (next(it))
  36. except StopIteration:
  37. sys.exit()
  38. # 生成器
  39. def gen_fun():
  40. yield from range(5)
  41. gen_fun()