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)
这可能听起来很愚蠢,但是生成器中是否有这个先前的内容,如果没有,为什么会这样?为什么我们不能减少迭代器,或者我不知道现有的方法,请多指教。什么是实现我手头的最接近的方法。
不,生成器函数中没有这样的函数可以返回。原因是Python本身并不存储生成器函数中的先前值,并且由于它不存储它,因此它也无法执行重新计算。
例如,如果您的生成器是一个时间敏感的函数,例如
def time_sensitive_generator():
yield datetime.now()
Run Code Online (Sandbox Code Playgroud)
您将无法重新计算此生成器函数中的先前值。
当然,这只是无法计算先前值的许多可能情况之一,但这就是想法。
如果您不自己存储该价值,它将永远丢失。