application.py 中为何将 clearup 写成一个生成器函数?
原问题在这里:http://stackoverflow.com/questions/5870676/why-call-clearup-code-in-generator-function
简述就是 application.py 中为何将 clearup 写成一个生成器函数。
大家有什么看法?
2011-05-04 15:24:24 甩葱哥 (走别人的路,让别人一路走好)
写成生成器是为了确保在最后才会被调用。
之前我把它这里的peep等函数都给省掉了,因为没怎么看懂,以为没必要。
后来写了一个StaticHandler,用到了yield,结果问题就来啦(发送了一个Content-Type的http头,结果浏览器没收到),因为含有yield的函数调用时根本不会执行里面的任何代码,而是返回一个生成器,只有显式的用next()或iterator等取值时才会执行到第一次yield。
经过这个事件,我终于理解了它问什么要对生成器取第一个值,然后再用chain包装成等价的结果。
类似的,因为clearup必须在所有结果都返回后才执行,所以把它包装成一个生成器,不然对于生成器结果,在第一次yield后就进行clearup,就可能导致yield其余结果时出错。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。