生成器 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
- 生成器(generator)是一种特殊的迭代器(iterator)
- 当函数中含有
yield
关键字,那么这个函数就变为生成器 - #2相当于实例化,但程序不会运行。当循环f调用x的时候程序第一次执行
- 首次调用必须使用
__next__
或next()
- for循环默认每次调用
__next__
或next()
- 第一次循环程序到#1处程序挂起并返回yield右侧值
- 第二次循环程序从yield处开始运行
-
yield
只能遍历一次,遍历到最后会抛出异常StopIteration -
send()
函数可以传递参数,通过yield
右侧表达式给左侧赋值
特点
- 只可遍历一次
- 延时操作
- 调用生成器中的元素时才会执行函数生成数据
- 节省内存,提高CPU效率
网友评论