yied
def work_1():
yield 1
yield from work_2()
yield 2
def work_2():
yield 3
yield 4
if __name__ == '__main__':
task = work_1()
for i in task:
print(i)
>>1
3
4
2
例子1:yied 生成器,主要用于函数中,函数fab 和fab1结果一致
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b #yied 会把b值添加到一个隐形的列表中,并且在循环结束后返回隐形列表 也就是迭代器
a, b = b, a + b
n = n + 1
def fab1(max):
n,a,b = 0,0,1
l = []
while n < max:
l.append(b)
a, b = b, a + b
n = n + 1
return l
for n in fab(7):
print('fab',n)
for n1 in fab1(7):
print('fab1',n1)
asyncio
协程只有一个线程
来回切换任务
#asyncio 判断是否有await 有就切换
import asyncio
async def work_1():
print(1)
await asyncio.sleep(3)
print(2)
async def work_2():
print(3)
await asyncio.sleep(3)
print(4)
if __name__ == '__main__':
# task 对象
tasks = [
asyncio.ensure_future(work_2()),
asyncio.ensure_future(work_1()),
]
#创建事件循环对象
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))