理解生成器

定义生成器 

yield关键字,可以让我们定义一个生成器函数。

def generator_func():
    print('a')
    yield 1

g = generator_func()
print(g)

>>> <generator object generator_func at 0x10e178b88>

推动生成器

使用next函数从生成器中取值

def generator_func():
    print('a')
    yield 1


g = generator_func()
ret1 = next(g)
print(ret1)

>>>
a
1

 

使用next可以推动生成器的执行,下面的代码,我们可以看到每一次执行next可以让generator_func中的代码从上一个位置开始继续执行到yield,并且将yield后面的值返回到函数外部,最终我们可以执行到yield 3。

def generator_func():
    print('a')
    yield 1
    print('b')
    yield 2
    print('c')
    yield 3
    print('d')

g = generator_func()
ret1 = next(g)
print(ret1)
ret2 = next(g)
print(ret2)
ret3 = next(g)
print(ret3)

>>>

  a
  1
  b
  2
  c
  3

当函数中已经没有更多的yield时继续执行next(g),遇到StopIteration

def generator_func():
    print('a')
    yield 1
    print('b')
    yield 2
    print('c')
    yield 3
    print('d')

g = generator_func()
ret1 = next(g)
print(ret1)
ret2 = next(g)
print(ret2)
ret3 = next(g)
print(ret3)
next(g)
next和StopIteration

相关文章: