gpt4 book ai didi

python - 使用 return 的优缺点(yield from some_function())

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:56 25 4
gpt4 key购买 nike

我经常看到类似下面几行的代码(类似于 aiohttp 文档中的示例)。

@asyncio.coroutine
def init(loop):
srv = yield from loop.create_server(web.Application().make_handler(), '0.0.0.0', 8080)
return srv

假设您不想在获取和返回对象之间对 srv 对象执行任何操作,如下所示在 1 行中执行此操作是否有任何优点/缺点?

@asyncio.coroutine
def init(loop):
return (yield from loop.create_server(web.Application().make_handler(), '0.0.0.0', 8080))

最佳答案

您似乎已经改编的 aiohttp 文档中的示例具有重要的附加代码:

@asyncio.coroutine
def init(loop):
app = web.Application(loop=loop)
app.router.add_route('GET', '/{name}', handle)

srv = yield from loop.create_server(app.make_handler(),
'127.0.0.1', 8080)
print("Server started at http://127.0.0.1:8080") # THIS PART
return srv

该函数需要在yield fromreturn 之间做一些事情,所以它需要将返回值保存到一个变量中。如果yield和return之间不需要做某事,确实相当于do

return (yield from whatever)

代替

srv = yield from whatever
return srv

您可以在同一页面的其他示例中看到这样做:

@asyncio.coroutine
def fetch_page(url):
response = yield from aiohttp.request('GET', url)
assert response.status == 200
return (yield from response.read())

举个像您的代码一样简单的示例,我认为您甚至不需要 yield from。你应该能够做到

@asyncio.coroutine
def init(loop):
return loop.create_server(web.Application().make_handler(), '0.0.0.0', 8080)

尽管我不熟悉 asyncio,所以我不完全确定它不会与 asyncio.coroutine 装饰器发生奇怪的交互。

关于python - 使用 return 的优缺点(yield from some_function()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31308271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com