今日知识
函数复习,生成器函数复习,协程入门,协程VS多线程,协程版生产者消费者模型
函数的复习
函数的定义与调用
在不执行代码的情况下
需要明确代码是如何一步一步执行的
def func():
print(1)
return 2
print(2)
res = func()
print(res)
生成器函数复习
把return换为yield
函数就会变为一个生成器
只要函数中有了yield,那么这个函数就是生成器函数
对象的创建 = 类名()
生成器的创建 = 生成器函数名()
希望让生成器对象执行起来
生成器对象.__next__
()
生成器对象运行起来后
它会执行函数内部的代码
直到遇见yield就会停住
返回yield后面的数据
并且指针状态会停留在yield这一行的行未
当第二次执行
生成器对象.__next__
()
从上一次停留的地方继续往下走
情况1,直到遇见yield就会停住,返回yield后面的数据
情况2,没有遇到yield,函数结束,它会按照迭代器协议报错。得不到数据,经协过的代码仍会被执行.
测试代码
def func():
print(1)
yield 2
print(22)
res = func()
print(res)
n = res.__next__()
print(n)
n = res.__next__()
print(n)
# for i in res:
# print(i)
另一种方式让生成器函数跑起来
方式一
生成器对象.__next__
()
方式二
next(生成器对象)