一.列表生成式
a = [i*2 for i in range(10)]
1.不用中间值进行赋值
斐波拉齐数列
a,b=b,a+b
注意:不是这样理解
a=b a=1,b=2,a=b,a=2,b=a+b=4
而是:t=(b,a+b) //t是一个tuple
a=t[0] b=t[1]
二.生成器
生成器的实质:按一种规律或有规则的方式,当用户需要该数据时通过__next__()进行生成,不能进行切片。
特点:占用的内存空间小,如:生成10000个数,用列表是将每一个数据写入内存后,用户才能使用,但生成器是要用时才生成
生成器创建方法:
1. a = (i *2 for i in range (10))
2.函数方式用yield,此时的函数不在是函数而是一个生成器
yield 的作用:停止并返回yield右边的值,再跳出去执行外面的代码,当外面用到__next__(),后又会跳回到生成器中的yield处执行下部分。
def fib(max): n,a,b=0,0,1 while n < max: yield b a,b=b,a+b n=n+1
3.send(信息) 有__next__()的作用同时还有将send中的信息发给yield
import time def comsuer(name): print("%s 准备开吃了"%name) while True: ret=yield print("[%s]正在吃[%s]的包子"%(name,ret)) a=["豆沙馅","白菜馅","猪肉馅","韭菜馅"] def produce(name): c=comsuer("小芳") c1=comsuer("小红") c.__next__() c1.__next__() print("%s正在包子,,,"%name) for i in a: time.sleep(1) c.send(i) c1.send(i) produce("高佳雪")