目前我正在学习pythontronado,我发现了一个有趣的def here,示例代码如下
@gen.coroutine
def fetch_coroutine(url):
http_client = AsyncHTTPClient()
response = yield http_client.fetch(url)
return response.bodyere
如您所见,def函数同时包含yield和return。。。那么,它是否遵循python规则?我们如何使用这种定义?任何人给我一些样品将非常感谢。。。在
Tags:
{{{cda}的执行在cda}结束。显然,在
return
中给定一个值只会将其作为StopIteration
异常的参数传递。在注释中的pointed out是在python3.3之后才允许传递这样的值。在
在正常迭代(即
for x in f()
)中看不到这个值。在Tornado似乎对它做了一些特别的事情,通过使用
next
进行迭代并捕捉异常。协同程序是一个复杂的话题。这可能是协同程序的“结果”,其中的yield
只是暂停执行和交换数据。在在python2中没有。在python2中,包含“yield”的函数可以有一个没有值的纯“return”,但不允许返回值。龙卷风有一个解决办法:你可以先屈服,然后再提高发电机回路(值):
在Python 3.3及更高版本中,包含“yield”的函数也可以返回值:
^{pr2}$Python3.3获得了从PEP 380中的生成器返回值的能力,以及新的语句“yield from”。在
相关问题 更多 >
编程相关推荐