python - python:为什么我需要将生成器函数分配给变量,否则它将不起作用?
问题描述
为什么会这样:
def even_gen():
n = 0
while True:
yield n
n += 2
evens_ = even_gen()
evens = list(next(evens_) for _ in range(5))
#[0,2,4,6,8]
但这不会:
def even_gen():
n = 0
while True:
yield n
n += 2
evens = list(next(evens_gen()) for _ in range(5))
#[0,0,0,0,0]
唯一的区别是将生成器移动到列表函数中。我发现我们需要首先将它分配给一个变量,然后它才能工作......
什么原因?
解决方案
因为evens_gen()
在每次迭代中都会创建一个新的生成器,因此next
总是会得到第一个元素0
.
推荐阅读
- azure - 从 Azure DevOps 中的 ARM 模板创建的新资源组的角色分配授权失败
- c# - 为什么引用不通过
- kotlin - 无法访问协程中的函数参数
- r - 用词性标注确定句子的时间性
- r - 使用模式匹配编写 for 循环
- html - 将鼠标悬停在同一父级内的不同类上时是否可以显示一个类?
- azure - 在此期间发送的数据过多并在 Application Insights 中被删除
- swift - 我无法在 swift Playground 文件中导入 AudioKit 或 AudioKitPlaygrounds
- cakephp - 在 CAKEPHP 1.3 中编写蛋糕测试用例时使用多个数据库源
- java - 如何使用 Java 代码从具有嵌套数据的 Json 数组中获取值