在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
def yield_test(n):
while n > 0:
print('before yield',n)
yield n
n -= 1
print('after yield',n)
res = yield_test(3)
res.__next__() #before yield 3
res.__next__() #before yield 3 after yield 2 before yield 2
res.__next__() #before yield 3 after yield 2 before yield 2 after yield 1 before yield 1
输出结果:
before yield 3
after yield 2
before yield 2
after yield 1
before yield 1
执行 yield_test 函数,返回一个 iterable 对象,在 for 循环执行时,每次循环都会执行 yield_test 函数内部的代码,执行到 yield n 时,yield_test 函数就返回一个迭代值,下次迭代时,代码从 yield n 的下一条语句继续执行。
#使用for循环
for i in res:
print(i)
输出结果:
before yield 3
3
after yield 2
before yield 2
2
after yield 1
before yield 1
1
after yield 0
比较一下return
def return_test(n):
while n > 0:
print('before return')
return n
n -= 1
print('after return')
res = return_test(3)
print(res)
输出结果:
before return
3
return_test函数返回的是int数值,且执行到return n后就不再继续往下执行了。