#列表生成器
list=[x**2 for x in range(10)]
#print(list)#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#生成器 保持计算方式 较少内存
#创建生成器 第一种方式
list=(x**2 for x in range(10))
#print(list)#<generator object <genexpr> at 0x00000180AC3080C8> 意思:生产一个对象 再地址0x00000180AC3080C8 放着
#用一个计算出一个
#print(next(list))
#创建生成器 第二种方式
#斐波拉且数列
def creatNum():
print('--start--')
a,b=0,1
for x in range(5):
yield b#next 后程序暂停 输出b值
a,b=b,a+b
print('--end--')
#creatNum()#没有输出“--start--" 因为函数里面有关键字yield 它就是一个生成器 返回一个生成器
#print(creatNum())#<generator object creatNum at 0x000002640EAB3DC8>
a=creatNum() #找一个对象a 来接收它
for x in a :
print(x)
--start--
1
1
2
3
5
--end--
生成器应用--协同
#生成器的应用 协程
def test1():
while True:
yield None
print('- 1 - ')
def test2():
while True:
yield None
print('- 2 - ')
t1=test1()
t2=test2()
while True :
next(t1)
next(t2)