python3 迭代器(Iterator)和生成器(generator)

时间:2023-03-09 00:40:03
python3 迭代器(Iterator)和生成器(generator)

一、迭代器定义:

  迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象;

  集合数据类型如listdictstr等是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()