当前位置: 首页 > 科技观察

Python列表理解支持异步?

时间:2023-03-11 23:00:41 科技观察

基本原理和目标Python广泛支持同步理解,允许使用简单明了的语法生成列表、字典和集合。我们建议为异步代码实现类似的语法结构。为了说明改进的可读性,请考虑以下示例:result=[]asyncforinaiter():ifi%2:result.append(i)使用建议的异步解析式语法,上面的代码变得非常短:result=[iasyncforiniinaiter()ifi%2]此PEP还可以在各种推导中使用await表达式:result=[awaitfun()forfuninfuncs]标准化异步推导我们建议允许推导在列表、集合和字典中使用公式中的异步。PEP-525获得批准后,我们??还可以创建异步生成器表达式。示例:集合推导式:{iasyncforiinagen()}列表推导式:[iasyncforiinagen()]字典推导式:{i:i**2asyncforiinagen()}生成过滤器表达式:(i**2asyncforiinagen())允许异步解析和生成器表达式中的if和for子句的异步:data)}异步解析器只允许在“asyncdef”函数中使用。原则上,异步生成器表达式在任何上下文中都是允许的。但是,在Python3.6中,由于async和await只是“软关键字”,因此只能在asyncdef函数中使用异步生成器表达式。一旦async和await成为Python3.7中的保留关键字,此限制将被删除。awaitinparses我们建议在异步和同步解析中允许await表达式:={awaitfun()forfuninfuncsifawaitsmth}result={fun:awaitfun()forfuninfuncsifawaitsmth}result=[awaitfun()asyncforfuninfuncs]result={awaitfun()asyncforfuninfuncs}result={fun:awaitfun()[awaitfun()asyncforfuninfuncsifawaitsmth]result={awaitfun()asyncforfuninfuncsifawaitsmth}result={fun:awaitfun()asyncforfuninfuncsifawaitsmth}这仅在asyncdef函数体中有效。语法更新该提案需要语法更改:向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.txtPEP原文:https://www.python.org/dev/peps/pep-0530PEPtitle:PEP530--AsynchronousComprehensionsPEP作者:YurySelivanov创建日期:2016-09-03收录版本:3.6译者:猫下豌豆花@Python猫PEP翻译计划:https://github.com/chinesehuazhou/peps-cn本文转载自微信公众号“蟒蛇猫”,可以通过以下二维码关注。转载本文请联系Python猫公众号。