生成器 generator

2018-03-02  本文已影响0人  XHXHX

生成器 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效率
上一篇 下一篇

猜你喜欢

热点阅读