一、迭代器定义:
迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象;
集合数据类型如list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象。
注意:
1、迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束;
2、迭代器只能往前不会后退,迭代到最后继续访问会从头再开始;
3、凡是可作用于for
循环的对象都是Iterable
类型;
4、凡是可作用于next()
函数的对象都是Iterator
类型;
二、迭代器实现示例:
1 from collections import Iterator 2 3 isinstance((x for x in range(10)),Iterator) # x for x in range(10) 为 列表生成式 4 5 isinstance([], Iterator) 6 7 isinstance({}, Iterator) 8 9 isinstance('abc', Iterator)
三、生成器:
列表元素可以按照某种算法推算出来,使用时只需要循环该推算出下一个元素,类似于这样的机制被称为生成器(生成器就是一个迭代器)
创建生成器:
使用了 yield 的函数的就被称为生成器
1 #!/usr/bin/python3 2 3 import sys 4 5 def fibonacci(n): # 生成器函数 - 斐波那契 6 a, b, counter = 0, 1, 0 7 while True: 8 if (counter > n): 9 return 10 yield a 11 a, b = b, a + b 12 counter += 1 13 f = fibonacci(10) # f 是一个迭代器,由生成器返回生成 14 15 while True: 16 try: 17 print (next(f), end=" ") 18 except StopIteration: 19 sys.exit()