Python3 迭代器与生成器

迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。python

迭代器是一个能够记住遍历的位置的对象。函数

迭代器对象从集合的第一个元素开始访问,直到全部的元素被访问完结束。迭代器只能往前不会后退。spa

迭代器有两个基本的方法:iter() 和 next()code

>>>list=[1,2,3,4]
>>> it = iter(list)    # 建立迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>

 

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。对象

跟普通函数不一样的是,生成器是一个返回迭代器的函数,只能用于迭代操做,更简单点理解生成器就是一个迭代器。ci

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

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

#!/usr/bin/python3

import sys

def fibonacci(n,w=0): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
#        print('%d,%d' % (a,b))
        counter += 1
f = fibonacci(10,0) # f 是一个迭代器,由生成器返回生成
#type(f)      # <class 'generator'>

while True:
    try:
        print (next(f), end=" ")
    except :
        sys.exit()

每次执行到有yield时,返回yield后面的值,而且函数会暂停,直到下次调用或迭代终止;class

yield后面能够加多个数值(能够是任意类型),但返回的值是元组类型的。import

如:yield m ,n ,l ,k ,p

当一个生成器函数被调用时,它返回一个生成器对象,而不用执行该函数。 当第一次调用next()方法时,函数开始执行,直到它达到yield语句,返回yield值。 yield保持跟踪,即记住最后一次执行,而第二个next()调用从前一个值继续。

相关文章
相关标签/搜索