Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Python中的可重用项和生成器_Python_Generator - Fatal编程技术网

理解Python中的可重用项和生成器

理解Python中的可重用项和生成器,python,generator,Python,Generator,我最近在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() 我想知道

我最近在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次才能打印所有内容。

这是首先使用生成器的全部要点:

for i in x:
    print i
这是一台发电机 0 1. 2. 3. 4. 5. 6. 7. 8. 9 静止发电机。。。 完成
这就是使用发电机的首要意义:

for i in x:
    print i
这是一台发电机 0 1. 2. 3. 4. 5. 6. 7. 8. 9 静止发电机。。。 完成
您可以使用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

您可以使用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

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


调用x.next()实际上并不特定于生成器——如果愿意,也可以使用列表来完成。但您不使用列表,而是使用for循环:与生成器相同。

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


调用x.next()实际上并不特定于生成器——如果愿意,也可以使用列表来完成。但是你不需要列表,而是使用for循环:与生成器相同。

如果我想使用
.next()
方法,我会把
x
当作列表,然后使用
.next()
来迭代列表?@MaxKim为什么要使用
.next()
方法?如上图所示,您可以使用一个简单的
for
-循环来迭代生成器。如果我想使用
.next()
方法,我只需将
x
视为一个列表,然后使用
.next()
来迭代列表?@MaxKim为什么要使用
.next()
方法?您可以使用简单的
for
-循环遍历生成器,如上图所示。