python—迭代器与生成器

迭代器:迭代器是一个可以记住遍历的位置的对象

    迭代器对象从集合的第一个位置的元素开始访问,知道所有的元素被访问完结束,迭代器只能往前不会后退

迭代器的两个基本方法:iter和next

>>> l=[1,2]
>>> it=iter(l)    #将列表转换为迭代器对象
>>> type(it)
<class 'list_iterator'>
>>> next(it)    #输出迭代器的下一个元素
1
>>> next(it)
2
>>> next(it)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration    

迭代器对象可以用for循环来遍历

 

生成器 :使用了yield的函数称为生成器

    生成器是一个返回迭代器的函数,只能用于迭代操作

    在调用生成器运行的过程中,每次遇到yiled时函数会暂停并保存当前所有的运行信息,返回yiled的值,并在下一次执行next()方法时从当前位置继续运行

    调用一个生成器函数,返回一个迭代器对象

以下实例使用 yield 实现斐波那契数列:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/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()

执行以上程序,输出结果如下:

1
0 1 1 2 3 5 8 13 21 34 55
posted @ 2020-03-12 12:07  wind_y  阅读(148)  评论(0编辑  收藏  举报