最近我在python中使用了“yield”。我发现生成器函数非常有用。我的问题是,是否有东西可以减少生成器对象中富有想象力的光标。至于next(genfun)如何移动和输出容器中的+第i项,我想知道是否存在任何函数可以调用类似previous(genfun)的内容并移动到容器中的-1th项
实际工作
def wordbyword():
words = ["a","b","c","d","e"]
for word in words:
yield word
getword = wordbyword()
next(getword)
next(getword)
输出的
a
b
我希望看到和实现的是
def wordbyword():
words = ["a","b","c","d","e"]
for word in words:
yield word
getword = wordbyword()
next(getword)
next(getword)
previous(getword)
预期产出
a
b
a
这听起来可能有点傻,但在生成器中是否有此之前的,如果没有,为什么会这样?。为什么我们不能减少迭代器,或者我不知道现有的方法,请告诉我一些情况。什么是最接近的方法来实现我手头上的东西
在生成器对象上迭代会消耗它的元素,因此在使用
next
之后没有什么可返回的。您可以将生成器转换为list
,并实现自己的next
和previous
不,在生成器函数中没有这样的函数来排序返回。原因是Python不会以本机方式在生成器函数中存储上一个值,并且由于它不会存储该值,因此也无法执行重新计算
例如,如果生成器是对时间敏感的函数,例如
您将无法重新计算此生成器函数中的上一个值
当然,这只是无法计算以前的值的许多可能情况中的一种,但这就是想法
如果你不自己存储价值,它将永远丢失。
如前所述,没有这样的功能,因为生成器的整个点都是具有较小的内存占用。您需要存储结果
您可以自动存储以前的结果。生成器的一个用例是当您有一个概念上无限的列表(例如素数列表)时,您只需要一个初始段。您可以编写一个生成器,作为副作用构建这些初始段。有一个可选的
history
参数,生成器在生成时附加到该参数。例如:如果使用不带参数的生成器
getword = wordbyword()
,它将像普通生成器一样工作,但如果向其传递一个列表,该列表将存储不断增长的历史:相关问题 更多 >
编程相关推荐