PEP原文:https://www.python.org/dev/peps/pep-0530PEP标题:PEP530--AsynchronousComprehensionsPEP作者:YurySelivanov创建日期:2016-09-03合并版本:3.6:豌豆花猫下@Python猫PEP翻译计划:https://github.com/chinesehuazhou/peps-cn摘要PEP-492和PEP-525通过async/await语法支持引入了原生协程和异步生成器。此pep建议为列表、集合、字典推导式和生成器表达式添加异步版本。基本原理和目标Python广泛支持同步理解,允许使用简单明了的语法生成列表、字典和集合。我们建议为异步代码实现类似的语法结构。为了说明改进的可读性,请考虑以下示例:result=[]asyncforiinaiter():ifi%2:result.append(i)使用建议的异步分析语法,上面的代码将变得非常短:result=[iasyncforiinaiter()ifi%2]这个PEP还使得在各种解析中使用await表达式成为可能:result=[awaitfun()forfuninfuncs]列表、集合和字典理解。PEP-525获得批准后,我们??还可以创建异步生成器表达式。例子:集合解析公式:{iasyncforiinagen()}列表解析公式:[iasyncforiinagen()]字典解析公式:{i:i**2asyncforiinagen()}generated过滤器表达式:(i**2asyncforiinagen())允许异步forwithif和for异步解析和生成器表达式中的子句:dataset={dataforlineinaiter()asyncfordatainlineifcheck(data)}data={dataforlineinaiter()asyncfordatainlineifcheck(data)}异步解析只允许在“asyncdef”函数中使用。原则上,异步生成器表达式在任何上下文中都是允许的。但是,在Python3.6中,由于async和await只是“软关键字”,因此只能在asyncdef函数中使用异步生成器表达式。一旦async和await成为Python3.7中的保留关键字,此限制将被删除。awaitinparses我们建议允许在异步和同步解析中使用await表达式:在funcs}result=[awaitfun()forfuninfuncsifawaitsmth]result={awaitfun()forfuninfuncsifawaitsmth}result={fun:awaitfun()forfuninfuncsifawaitsmth}结果=[等待fun()async在funcs中获得乐趣]result={awaitfun()async在funcs中获得乐趣}result={fun:awaitfun()async在funcs中获得乐趣}result=[awaitfun()asyncforfuncsifawaitsmth]result={awaitfun()asyncforfuninfuncsifawaitsmth}result={fun:awaitfun()asyncforfuninfuncsifawaitsmth}ThisisonlyinasyncValidindeffunction身体。语法更新该提案需要语法更改:向comp_for添加可选的“async”关键字:comp_for:[ASYNC]'for'exprlist'in'or_test[comp_iter]解析AST节点将具有新的is_async参数。向后兼容性该提议是完全向后兼容的。接受2016年9月6日[1],PEP-530被Guido接受。参考资料1、https://mail.python.org/pipermail/python-ideas/2016-September/042141.html2、https://github.com/1st1/cpython/tree/asyncomp3、http://bugs。python.org/issue28008致谢感谢GuidovanRossum、VictorStinner和Elvispranskevichuss提供的反馈、代码审查和对此pep的讨论。版权本文档已进入公共领域。源文件:https://github.com/python/peps/blob/master/pep-0530.txt
