美文网首页
迭代器与生成器

迭代器与生成器

作者: 水果坚果燕麦片 | 来源:发表于2019-02-14 15:12 被阅读0次

    迭代器

    什么是迭代器(iter)
    迭代器是python的一种容器类型,取了迭代器中的上一个元素才能取下一个元素,而且取了这个元素中,迭代器中的这个元素就不存在了
    迭代器的字面量
    迭代器没有指定格式的字面量。只有迭代器对象
    迭代器作为容器,里面的元素只能通过其他序列转换,或者通过生成器生成
    迭代器中的元素可以是任何类型的数据

    将字符串转换成迭代器,迭代器中的元素就是字符串中的每个字符

    iter1 = iter('hello')
    print(iter1)
    print(next(iter1))
    print(next(iter1))
    print(next(iter1))
    print(next(iter1))
    print(next(iter1))
    输出的结果如下:
    <str_iterator object at 0x0247A830>
    h
    e
    l
    l
    o
    
    import sys         # 引入 sys 模块
     
    list=[1,2,3,4]
    it = iter(list)    # 创建迭代器对象
     
    while True:
        try:
            print (next(it))
        except StopIteration:
            sys.exit()
    
    for x in iter1:
        print(x)
    

    遍历的方法也是一样,但是取过了之后就不再能取到

    生成器

    在 Python 中,使用了 yield 的函数被称为生成器(generator)
    生成器就是迭代器,迭代器不一定是生成器
    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

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

    调用一个生成器函数,返回的是一个迭代器对象。
    以下实例使用 yield 实现斐波那契数列:

    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()
    结果如下:
    0 1 1 2 3 5 8 13 21 34 55 
    

    相关文章

      网友评论

          本文标题:迭代器与生成器

          本文链接:https://www.haomeiwen.com/subject/moxeeqtx.html