首页 > 解决方案 > 以前的收益操作 - python

问题描述

最近我一直在 python 中使用'yield'。而且我发现生成器函数非常有用。我的问题是,是否有一些东西可以减少生成器对象中的想象光标。只是 next(genfun) 如何移动和输出容器中的第 +i 个项目,我想知道是否存在任何可能调用类似 previous(genfun) 并移动到容器中的第 -1 个项目的函数。

实际工作

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

这可能听起来很傻,但是生成器中是否有这个先前的,如果没有,为什么会这样?为什么我们不能减少迭代器,或者我对现有方法一无所知,请稍加说明。什么是实现我手头的最接近的方法。

标签: pythonlistfunctionyieldnext

解决方案


不,没有这样的函数可以返回到生成器函数中。原因是 Python 本身不会将先前的值存储在生成器函数中,并且由于它不存储它,它也无法执行重新计算。

例如,如果您的生成器是对时间敏感的函数,例如

def time_sensitive_generator():
    yield datetime.now()

您将无法重新计算此生成器函数中的先前值。

当然,这只是无法计算先前值的许多可能情况之一,但这就是想法。

如果您不自己存储价值,它将永远丢失。


推荐阅读