1

我最近在 Python 中遇到了生成器的想法,所以我为自己做了一个基本的例子:

def gen(lim):
    print 'This is a generator'
    for elem in xrange(lim):
        yield elem
    yield 'still generator...'
    print 'done'

x = gen
print x
x = x(10)
print x
print x.next()
print x.next()

我想知道是否有任何方法可以遍历我的变量x并且必须写出print x.next()11 次才能打印所有内容。

4

3 回答 3

2

这就是首先使用生成器的全部意义:

for i in x:
    print i
这是一个发电机
0
1
2
3
4
5
6
7
8
9
还是发电机...
完毕
于 2013-07-14T15:15:23.947 回答
2

是的。实际上,您可以像迭代列表(或其他可迭代对象)一样遍历生成器:

x = gen(11)
for i in x:
    print i

调用 x.next() 实际上并不是生成器所特有的——如果你愿意,你也可以用一个列表来做。但是你不使用列表,你使用 for 循环:与生成器相同。

于 2013-07-14T15:16:35.353 回答
1

您可以使用 for 循环来迭代生成器。

def gen(lim):
    print 'This is a generator'
    for elem in xrange(lim):
        yield elem
    yield 'still generator...'
    print 'done'

for x in gen(10):
    print x
于 2013-07-14T15:15:46.447 回答