2015-05-29 78 views
0

我想在Python 3.4中使用内置的next()函数创建生成器。这里是我当前的代码:Python中的生成器只返回第一个元素

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

每当我叫我建的发电机,它只返回1,每次我称呼它,这很奇怪,因为我认为,在发电机的每个元素只能通过一次迭代。我该如何解决这个问题,以便它能按照1,2,3,4的顺序打印出来?谢谢您的帮助。

+5

'next'不是你如何构建一个生成器 - 它是如何从它检索元素......你的代码实际上是'myGenerator = 1' –

回答

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 
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可以做同样的功能。

相关问题