总结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接受。最近为初学者整理了数百G的Python学习资料,包括电子书、教程、源码等,免费分享给大家!想上“Python编程学习圈”,发“J”免费领取
