yield 这个关键字,是指yield 声明得变量,变成一个生成器输出!在一个函数中,如果有这个关键字,python解释器不再把其当成一个普通函数,而是当成一个生成器,生成器每次生成得结果是yield后面得指,在调用得时候,函数会执行到yield 输出之后,这个函数先停止执行,直到下一次调用得时候(使用生成器得next()方法,或者for方法遍历,for遍历也是内部调用得next()这个方法去实现的)
例如一个斐波那契数列:
斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到
正常我们可以这样遍历打印出来:
def fab(max):
n, a, b = 0, 0, 1
while n < max:
print b
a, b = b, a + b
n = n + 1
结果就是
max=5但是改为这样之后:
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b
# print b
a, b = b, a + b
n = n + 1
'''
这个函数就不是一个常规函数,变成了一个生成器
要作为一个生成器去用,要么for遍历出来要么next()出来使用
for方式 next()方式yield from将调用一个子协程(也就是在一个协程中调用另一个协程)并直接获得子协程的返回结果。
网友评论