Python中的生成器只返回第一个元素

时间:2015-05-29 20:36:40

标签: python generator

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

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

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

2 个答案:

答案 0 :(得分:2)

它有点不错,因为你实际上有你想要的发生器,这是

(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

答案 1 :(得分:0)

如果您不知道如何使用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可以执行相同的功能。