Python 支持同步的推导式版本

pep-492 和 pep-525 通过 async/await 语法,引入了对原生协程和异步生成器的支持。本 pep 提议给列表、集合、字典解析式和生成器表达式添加异步的版本。
基本原理和目标python 广泛地支持同步的推导式,允许使用简单而简洁的语法生成列表、字典和集合。我们提议为异步代码实现类似的语法结构。
为了说明可读性的改善,请考虑下面的例子:
result = []async for i in aiter(): if i % 2: result.append(i)有了提议的异步解析式语法,上面的代码会变得非常简短:
result = [i async for i in aiter() if i % 2]本 pep 也使得在各种解析式中使用 await 表达式成为可能:
result = [await fun() for fun in funcs]规范异步的解析式我们提议允许在列表、集合与字典解析式中使用 async。待 pep-525 被批准之后,我们还可以创建异步的生成器表达式。
例子:
集合解析式:{i async for i in agen()}列表解析式:[i async for i in agen()]字典解析式:{i: i ** 2 async for i in agen()}生成器表达式:(i ** 2 async for i in agen())允许在异步解析式和生成器表达式中使用 async for 与 if 以及 for 子句:
dataset = {data for line in aiter() async for data in line if check(data)}data = {data for line in aiter() async for data in line if check(data)}异步解析式只允许在“async def”函数中使用。
原则上,异步生成器表达式允许用在任何上下文中。然而,在 python 3.6 中,由于 async 和 await 只是“软关键字”(soft-keyword),异步生成器表达式只允许在 async def 函数中使用。一旦 async 和 await 在 python 3.7 中成为保留关键字,这个限制将被移除。
解析式中的 await我们提议允许在异步和同步解析式中使用 await 表达式:
result = [await fun() for fun in funcs]result = {await fun() for fun in funcs}result = {fun: await fun() for fun in funcs}result = [await fun() for fun in funcs if await smth]result = {await fun() for fun in funcs if await smth}result = {fun: await fun() for fun in funcs if await smth}result = [await fun() async for fun in funcs]result = {await fun() async for fun in funcs}result = {fun: await fun() async for fun in funcs}result = [await fun() async for fun in funcs if await smth]result = {await fun() async for fun in funcs if await smth}result = {fun: await fun() async for fun in funcs if await smth}这只在 async def 函数体中有效。
语法的更新本提议需要在语法层面做一个修改:在 comp_for 中添加可选的“async”关键字:
comp_for: [async] 'for' exprlist 'in' or_test [comp_iter]解析式的 ast 节点将有一个新的 is_async 参数。

区块链技术可以确保个人对其保留信息的所有权
电网企业实现综合能源服务转型的策略思考
Verilog HDL之多路选择器设计
中欧汽车产业链CEO峰会门票销售、演讲赞助与展位预定火热开售
库卡机器人之坐标偏移
Python 支持同步的推导式版本
浅谈几种常见的射频电路类型及主要指标
华为智能手机全球发货量就将突破2亿台大关
便携式GPS追踪器喇叭防水透音膜是如何实现防尘防水透声
学技术 | 碳化硅 SIC MOSFET 如何降低功率损耗
助力"芯格局",加速集成电路行业绿色可靠发展
天气对于自动驾驶的实现有多大的影响
数据中心将会是怎样的天下
中国驻加使馆:要求美加立刻恢复孟晚舟人身自由
科研人员开发新技术,可大幅度提升3D打印速度
三环集团2018年净利增长22%,手机陶瓷后盖工艺取得突破
2009迪拜机械展/2009PMV工程机械展/中东机械展/安
电解电容纹波电流及频率测试方法
示波器探头的使用注意事项
氯乙烯检测仪是一种专门测量什么的仪器?-欧森杰