yield关键字
yield的作用是返回一个可以用来迭代的生成器
生成器函数和生成器
生成器函数是一种特殊的函数,它的函数内部含有yield表达式,调用它会返回一个特殊的迭代器,称生成器
def func1():
return 1
def func2():
yield 1
print(type(func1)) # <class 'function'>
print(type(func2)) # <class 'function'>
print(type(func1())) # <class 'int'>
print(type(func2())) # <class 'generator'>
yield表达式
如果一个函数定义中包含 yield 表达式,那么该函数是一个生成器函数(而非普通函数)。实际上,yield 仅能用于定义生成器函数。
与普通函数不同,生成器函数被调用后,其函数体内的代码并不会立即执行,而是返回一个生成器(generator-iterator)。当返回的生成器调用成员方法时,相应的生成器函数中的代码才会执行。
def square():
for x in range(4):
yield x ** 2
square_gen = square()
for x in square_gen:
print(x)
for
循环会调用 iter()
函数,获取一个生成器;而后调用 next()
函数,将生成器中的下一个值赋值给 x
;再执行循环体