Python生成器

假如要生成一个1-100的数字,若采用lis = [i for i in range(101)]的方式,则会把100个数字一次性获取到,如果加大数字量,生成1-10000000000000000000的数字,若仍采用上述列表解析的方式,会占用大量的资源,CPU运行会出现问题。若采用生成器(generator)的方式,一次只获取一个数字,并且在规定范围内想获取多少就获取多少,就会极大的减少资源的占用,并且可以保存算法。

1、生成器方式一:

将列表解析的中括号[]换成小括号(),每调用一次next()方法,就会获取一个值,不调用next()方法生成器就不会运行,若越界会报错

Python生成器_第1张图片
Python生成器_第2张图片

2、生成器方式二:yield 值

a、调用生成器函数,得到一个生成器对象,但这个生成器函数并没有执行

b、next调用得到的生成器对象,如果遇到了yield,代码会阻塞,next的返回值就是yield后的值

Python生成器_第3张图片
Python生成器_第4张图片

3、send的使用:

第一种和第二种,一旦生成器确定,算法不能改变。

这里的例子,定义了变量(temp),可以使用send发送参数,发给这里变量。

根据这个变量的值的不同,可以改变算法的逻辑。

所以,这种写法的作用:在运行过程中,可以改变算法

Python生成器_第5张图片
send作用:1、为当前停止的代码的左侧变量赋值 2、生成器往下走一个行,返回yield值
Python生成器_第6张图片

4、模拟协程:

Python生成器_第7张图片
Python生成器_第8张图片

你可能感兴趣的:(Python生成器)