我想在Python 3.4中使用内置的next()函数创建生成器。这里是我当前的代码:Python中的生成器只返回第一个元素
myGenerator = next(t for t in [1,2,3,4])
myGenerator
1
myGenerator
1.....
每当我叫我建的发电机,它只返回1,每次我称呼它,这很奇怪,因为我认为,在发电机的每个元素只能通过一次迭代。我该如何解决这个问题,以便它能按照1,2,3,4的顺序打印出来?谢谢您的帮助。
我想在Python 3.4中使用内置的next()函数创建生成器。这里是我当前的代码:Python中的生成器只返回第一个元素
myGenerator = next(t for t in [1,2,3,4])
myGenerator
1
myGenerator
1.....
每当我叫我建的发电机,它只返回1,每次我称呼它,这很奇怪,因为我认为,在发电机的每个元素只能通过一次迭代。我该如何解决这个问题,以便它能按照1,2,3,4的顺序打印出来?谢谢您的帮助。
这是一个有点漂亮,因为你确实有你想要的发电机,这是
(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
如果你不知道如何使用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
可以做同样的功能。
'next'不是你如何构建一个生成器 - 它是如何从它检索元素......你的代码实际上是'myGenerator = 1' –