生成器学习
生成器定义
在python里面,一边循环一边计算的机制,成为生成器:generator,此时并不是直接生成全部列表,而是将全部生成方式保存起来,需要时再生成
列表生成式:
生成器创建方法一:
a =[x*2 for x in range(10)]
#输出是:[0,2,4,,6,8,10,12,14,16,18]
#当要依靠上述方法生成一个列表时
b =(x*2 for x in range(10))
#此时b就是生成器,这就是创建生成器的第一个方法
#如果生成器在最后一次循环后,还要求继续生成,就会报错
生成器创建方法二:
#创建斐波拉契数列
def fib(times):
n =0
a,b=0,1
while n<times:
print(b)
a,b=b,a+b
n+=1
return "done"
#法二
def creatNum():
print('----start---')
a,b=0,1
for i in range(5):
yield b
a,b=b,a+b
#第一次执行时,不能写send函数。因为此时yield函数还没有实体,没法保存,或者在使用时可以这么写:
t =creatNum()
t.send(None)
#写完send函数时,需要一个值,但是不能在生成器没使用过时,就使用send函数,如果需要使用只能传回去None这个关键字
生成器的使用(多任务)
def test1():
while True:
print('----1----')
def test2():
while True:
print('----2----')
t1 =test1()
t2 =test2()
while True:
t1.__next__()
t2.__next__()
#此时由于执行速度很快,所以相当于两个test同时执行,相当于同时执行,成为协程,多任务的一种
多任务的方式有三种:协程,进程,线程