python基础:迭代器与生成器

发布时间:2019-08-29 07:41:00编辑:auto阅读(1426)

    一、迭代器

    迭代器只能向前访问,不能后退
    字典,列表,元组,字符串,range都是可以迭代的对象。

    1、创建迭代器

    `dict={1:3,2:4,3:5,4:6}
    key = iter(dict)
    print(key)
    print(next(key))
    print(next(key))

    values = iter(dict.values())
    print(values)
    print(next(values))
    print(next(values))

    list= [1, 2, 3, 4, 5]
    list2 = iter(list)
    print(list2)
    print(next(list2))
    print(next(list2))
    print(next(list2))
    print(next(list2))

    ranges = iter(range(1, 10))
    print(ranges)
    print(next(ranges))
    print(next(ranges))
    print(next(ranges))`
    运行结果:

    <dict_keyiterator object at 0x00523870>
    1
    2
    <dict_valueiterator object at 0x005238A0>
    3
    4
    <list_iterator object at 0x00405B30>
    1
    2
    3
    4
    <range_iterator object at 0x004F3A10>
    1
    2
    3

    2、读取迭代器:
    #for遍历

        list= [1, 2, 3, 4, 5]
        for i in iter(list):
            print(i)
    

    next()遍历:

     while True:
        try:
            print (next(it))
        except StopIteration:
            sys.exit()

    二、生成器
    使用了yield的函数称为生成器(generater).对于非常巨大的数了列表非常有用,一次读取一个元素,节省内存资源。
    生成器用于不知道会生成多大数据的场景,每生成一个数据返回一次
    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是迭代器。

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

    下面代码正常是死循环,但是使用yield以后,只在用next()方法,才会运行一次。

    def gena(i=2):
        while True:
            i = i * 2 - 1
            yield i

    运行:

    l = gena(2)
    print(l)
    print(next(l))
    print(next(l))

关键字