美文网首页跟着lucky老师学Python
第八章 迭代器和生成器

第八章 迭代器和生成器

作者: 帅气的Lucky | 来源:发表于2019-04-01 12:51 被阅读0次

    迭代器和生成器

    可迭代对象:可以直接作用于for循环的对象统称为可迭代对象(Iterable)。可以用isinstance()去判断一个对象是否是Iterable对象

    可以直接作用于for的数据类型一般分两种
    1、集合数据类型,如list、tuple、dict、set、string
    2、是generator,包括生成器和带yield的generator function

    迭代器:不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后跑出一StopIteration错误表示无法继续返回下一个值

    迭代器:

    1. 迭代是Python最强大的功能之一,是访问集合元素的一种方式。。
    2. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
    3. 迭代器有两个基本的方法:iter()next()

    ​可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator对象)
    可以使用isinstance()函数判断一个对象是否是Iterator对象

    使用 iter函数 变成Iterator对象

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

    引入方法判断是否为 Iterable 可迭代对象

    from collections import Iterable
    from collections import Iterator

    from  collections import Iterable
    from  collections import Iterator
    
    print(isinstance([], Iterable))
    print(isinstance((), Iterable))
    print(isinstance({}, Iterable))
    print(isinstance("", Iterable))
    print(isinstance((x for x in range(10)), Iterable))
    print(isinstance(1, Iterable))
    
    print(isinstance([], Iterator))
    print(isinstance((), Iteratorc
    print(isinstance({}, Iterator))
    print(isinstance("", Iterator))
    print(isinstance((x for x in range(10)), Iterator))
    

    生成器:

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

    ​ 生成器也实现了迭代器的功能

    ​ 使用列表生成式 mygener = (x for x in range(1000))#用一个生产一个并不是像生成列表一样都生成完 节约内存

    print(type(x **for **x **in **range(10)))

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

    例子:

    #普通列表 消耗资源
    mylist = [x for x in range(100000)]
    for i in mylist:
        print(i)
    #对比执行效率
    #生成器  节省资源
    mylist = (x for x in range(100000))
    for i in mylist:
        print(i) 
    

    在函数里使用 yield 来配合next来使用的

    1. yield
    2. Next()

    使用yield关键字修饰的值 下面的代码不会再执行 只有再次调用next函数的时候 会再次执行

    #没有生成器的go方法 调用的时候一口气都跑完  消耗资源
    def go():
        print(1)
        print(2)
        print(3)
    #有生成的函数 可以实现 next一次 走一次
    def go():
        print(1)
        yield 10 #执行print1,返回10,next
        print(2)
        yield 20#执行print2,返回20,next
        print(3)
        yield 30#执行print3,返回30,next
    
    def createlist():
        for i  in range(100):
            print(i)
            yield  i
    
    X=createlist()
    print(type(X))
    next(X)
    next(X)
    next(X)
    next(X)
    

    相关文章

      网友评论

        本文标题:第八章 迭代器和生成器

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