python - 以前的收益操作 - 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
这可能听起来很傻,但是生成器中是否有这个先前的,如果没有,为什么会这样?为什么我们不能减少迭代器,或者我对现有方法一无所知,请稍加说明。什么是实现我手头的最接近的方法。
解决方案
不,没有这样的函数可以返回到生成器函数中。原因是 Python 本身不会将先前的值存储在生成器函数中,并且由于它不存储它,它也无法执行重新计算。
例如,如果您的生成器是对时间敏感的函数,例如
def time_sensitive_generator():
yield datetime.now()
您将无法重新计算此生成器函数中的先前值。
当然,这只是无法计算先前值的许多可能情况之一,但这就是想法。
如果您不自己存储价值,它将永远丢失。
推荐阅读
- javascript - Discord.js :将特定服务器上的角色添加到 DM 机器人的用户
- firebase - 如何在 Firebase 中创建用户“组”?
- python - 错误:无法满足的约束 - 使用 APK 安装 python 时
- java - 在表名上出现 Spring 语法错误
- java - 如何从 sqlite 数据库中获取 ID 值(android studio java)
- c# - 获取 LINQ 列表中列表中的最大值
- c# - 在 IIS 7 中设置 2 个具有 2 个 IP 和不同证书的 SSL 站点
- pyenv - Homebrew pyenv ...无法安装 Python 3.8.3,尽管我已经安装了它
- android - VideoView 不在 android Q 中播放视频,但在较低的 android 版本中工作正常
- .net-core - 配置 GraphQL.Server.Authorization 和 IdentityServer