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