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

一、迭代器定义:

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

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

 

posted @ 2019-04-03 12:55  戏游人生  阅读(612)  评论(0编辑  收藏