What#39;s the purpose of quot;sendquot; function on Python generators?(在Python生成器上使用sendquot;函数的目的是什么?)
本文介绍了在Python生成器上使用&send";函数的目的是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
谁能给我举个例子,说明为什么存在与Python生成器函数相关联的"send"函数?我完全理解屈服函数。然而,发送函数让我感到困惑。有关此方法的文档非常复杂:
generator.send(value)
恢复执行并将一个值"发送"到生成器函数。VALUE参数成为当前YILE表达式的结果。send()方法返回生成器生成的下一个值,或者如果生成器退出而没有生成其他值,则引发StopIteration。
这是什么意思?我以为值是函数的输入?短语"send()方法返回生成器产生的下一个值"似乎也是Year函数的确切目的;Year返回生成器产生的下一个值.
有没有人能给我举一个利用SEND的生成器的例子,它可以完成一些收益不能完成的事情?
推荐答案
它用于将值发送到刚刚生成的生成器中。这里有一个人工的(无用的)说明性示例:
>>> 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' variable
20
>>> next(gen) # run up to the next yield
>>> gen.send(6) # goes into 'x' again
12
>>> next(gen) # run up to the next yield
>>> gen.send(94.3) # goes into 'x' again
188.5999999999999
您不能仅使用yield
来完成此操作。
至于它为什么有用,我见过的最好的用例之一是Twisted的@defer.inlineCallbacks
。本质上,它允许您编写如下函数:
@defer.inlineCallbacks
def doStuff():
result = yield takesTwoSeconds()
nextResult = yield takesTenSeconds(result * 10)
defer.returnValue(nextResult / 10)
发生的情况是takesTwoSeconds()
返回一个Deferred
,这是一个许许值将在稍后计算的值。Twisted可以在另一个线程中运行计算。计算完成后,它将其传递给延迟函数,然后将值发送回doStuff()
函数。因此,doStuff()
最终可能看起来或多或少类似于一个普通的过程函数,除了它可以执行各种计算和amp;回调等。在此功能之前的另一种选择是执行类似于:的操作:
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
要复杂得多,也很笨拙。
这篇关于在Python生成器上使用&send";函数的目的是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:在Python生成器上使用&send";函数的目的是什么?


猜你喜欢
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何将一个类的函数分成多个文件? 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 沿轴计算直方图 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01