栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python生成器“发送”功能的目的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python生成器“发送”功能的目的?

它用于将值发送到刚产生的生成器中。这是一个人为的(无用的)解释性示例:

>>> def double_inputs():...     while True:...         x = yield...         yield x * 2...>>> gen = double_inputs()>>> next(gen)       # run up to the first yield>>> gen.send(10)    # goes into 'x' variable20>>> next(gen)       # run up to the next yield>>> gen.send(6)     # goes into 'x' again12>>> next(gen)       # run up to the next yield>>> gen.send(94.3)  # goes into 'x' again188.5999999999999

您不能只通过做到这一点

yield

至于为什么有用,我见过的最好的用例之一是Twisted的

@defer.inlineCallbacks
。本质上,它允许您编写如下函数:

@defer.inlineCallbacksdef doStuff():    result = yield takesTwoSeconds()    nextResult = yield takesTenSeconds(result * 10)    defer.returnValue(nextResult / 10)

发生的情况是

takesTwoSeconds()
返回a
Deferred
,这是一个值,该值保证一个值将在以后计算。Twisted可以在另一个线程中运行计算。计算完成后,将其传递给延迟的对象,然后将值发送回
doStuff()
函数。因此
doStuff()
,除了可以执行各种计算和回调等操作外,最终看起来或多或少都像普通的过程函数。此功能之前的替代方法是:

def doStuff():    returnDeferred = defer.Deferred()    def gotNextResult(nextResult):        returnDeferred.callback(nextResult / 10)    def gotResult(result):        takesTenSeconds(result * 10).addCallback(gotNextResult)    takesTwoSeconds().addCallback(gotResult)    return returnDeferred

这更加令人费解和笨拙。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610480.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号