【问题标题】:Generator in Python only returning first elementPython中的生成器仅返回第一个元素
【发布时间】:2015-05-29 20:36:39
【问题描述】:

我正在尝试使用内置的 next() 函数在 python 3.4 中创建一个生成器。这是我当前的代码:

myGenerator = next(t for t in [1,2,3,4])
myGenerator
1
myGenerator
1.....

每当我调用我构建的生成器时,每次调用它都只返回 1,这很奇怪,因为我认为生成器中的每个元素只能迭代一次。如何修复此代码,以便按该顺序打印出 1、2、3、4?感谢您的帮助。

【问题讨论】:

  • next 不是您构建生成器的方式 - 而是您从中检索元素的方式...您的代码实际上是 myGenerator = 1

标签: python generator


【解决方案1】:

这有点好,因为你实际上有你想要的生成器,它是

(t for t in [1,2,3,4])

但是你在上面运行next。如果您查看its documentation,您会发现它与文档所说的完全一样:您将next 应用于生成器,它返回了一个对象,并且您将此对象绑定到您称为myGenerator 的东西上(它可能是您的,但它不是发电机)。每次调用它时,它都会计算为一个简单的对象。

>>> myGenerator = (t for t in [1,2,3,4])
>>> print next(myGenerator)
1
>>> print next(myGenerator)
2

【讨论】:

    【解决方案2】:

    如果你不知道如何使用next,我建议你使用yield

    def g(l):
        for i,x in enumerate(l):
            yield x
            if i == len(l):
                break
    
    for i in g([1,2,3,4]):
        print i
    

    演示:

    1
    2
    3
    4
    

    yield 可以做同样的功能。

    【讨论】:

      猜你喜欢
      • 2017-03-29
      • 1970-01-01
      • 2022-08-12
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 2021-08-03
      • 1970-01-01
      相关资源
      最近更新 更多