上一篇产量操作 - python

PIn*_*ngu 5 python iterator yield function list

最近我一直在使用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)
Run Code Online (Sandbox Code Playgroud)

输出的

a
b
Run Code Online (Sandbox Code Playgroud)

我希望看到和实现的是

def wordbyword():
  words = ["a","b","c","d","e"]
  for word in words:
    yield word

getword = wordbyword()

next(getword)
next(getword)
previous(getword)
Run Code Online (Sandbox Code Playgroud)

预期输出

a
b
a
Run Code Online (Sandbox Code Playgroud)

这可能听起来很愚蠢,但是生成器中是否有这个先前的内容,如果没有,为什么会这样?为什么我们不能减少迭代器,或者我不知道现有的方法,请多指教。什么是实现我手头的最接近的方法。

bur*_*alc 4

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

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

def time_sensitive_generator():
    yield datetime.now()
Run Code Online (Sandbox Code Playgroud)

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

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

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