美文网首页
生成器 generator

生成器 generator

作者: XHXHX | 来源:发表于2018-03-02 10:29 被阅读0次

    生成器 generator

    一. 推导式

    语法 : [表达式 值域 筛选条件]

    eg : (var+100 for var in range(0,100) if not var & 1)

    返回 : 返回值域内符合条件的数据经表达式运算后的对象集合

    Note : 使用_next__访问下一个元素,只可遍历一次,延时操作

    二. 函数生成器 yield

    #菲波那切数列--yield
    def Fib(max):
        n, x, y = 0, 0, 1;
            while n < max:
                yield y;    #1
                x, y = y, x + y;
                n += 1;
        return 'None';
    
    f = Fib(20);    #2
    for x in f:
        print(x);
    print(next(f));     #Error: StopIteration
    
    
    1. 生成器(generator)是一种特殊的迭代器(iterator)
    2. 当函数中含有yield关键字,那么这个函数就变为生成器
    3. #2相当于实例化,但程序不会运行。当循环f调用x的时候程序第一次执行
    4. 首次调用必须使用__next__next()
    5. for循环默认每次调用__next__next()
    6. 第一次循环程序到#1处程序挂起并返回yield右侧值
    7. 第二次循环程序从yield处开始运行
    8. yield只能遍历一次,遍历到最后会抛出异常StopIteration
    9. send()函数可以传递参数,通过yield右侧表达式给左侧赋值

    特点

    1. 只可遍历一次
    2. 延时操作
    3. 调用生成器中的元素时才会执行函数生成数据
    4. 节省内存,提高CPU效率

    相关文章

      网友评论

          本文标题:生成器 generator

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