协程背景
早期的协程是用yield来实现的,但是代码特别难懂, python3.5之后的版本, 使用 async 关键字来定义的函数。调用该函数,会返回一个协程对象
async和yield对比
不同点:
1.1 yield语法比较复杂,async语法简单
yield:b=yield a,yield右边的a是第一次的返回值,左边的b是第二次执行的输入值,最后还有一个return是最后一次返回值
async:方法前面加async,做send参数时,只能传None,代码可读性大大提高了, 开发者只需要关注传参和返回值, 而不需要花额外精力去理解yield左右的变量
1.2 async只需要send一次就可以获得返回值,yield要send2次
例子说明
分别用yield和async的方式, 实现协程
async def req1(param):
return param
def req2(param):
res = yield param
return res
def print_value(f, args):
try:
b = f.send(args)
except StopIteration as e:
print(f'{f.__name__}返回值 {e.value}')
return e.value
else:
print(f'{f.__name__}接收 {b}')
return b
g1 = req1(1)
print_value(g1, None)
g2 = req2(2)
res = print_value(g2, None)
print_value(g2, res)
'''
结果:
req1返回值 1
req2接收 2
req2返回值 2
'''
审核编辑:刘清
-
函数
+关注
关注
3文章
4350浏览量
63052 -
python
+关注
关注
56文章
4811浏览量
85103
发布评论请先 登录
相关推荐
C语言关键字分别发生在哪个阶段
基于ArkTS语言的OpenHarmony APP应用开发:HelloOpenharmony
typedef struct和直接struct的区别
inline关键字被优化导致此类函数被布局在flash内,怎么处理?
Go语言中的函数、方法与接口详解
鸿蒙OS开发实例:【ArkTS类库异步并发async/await】
![鸿蒙OS开发实例:【ArkTS类库异步并发<b class='flag-5'>async</b>/await】](https://file1.elecfans.com/web2/M00/C5/CD/wKgZomYCdwyAIFf5AAB_7E1pFms943.jpg)
PHP用户定义函数详细讲解
鸿蒙原生应用开发-ArkTS语言基础类库异步并发简述async/await
C语言中的typedef的应用
![C<b class='flag-5'>语言</b>中的typedef的应用](https://file1.elecfans.com/web2/M00/C3/B9/wKgaomXn5LGAbFesAAAe4pvOxcc159.png)
评论