python yield使用

 输出斐波那契數列前 N 个数

正常版本:

 1 def fab(max): 
 2     n, a, b = 0, 0, 1 
 3     L = [] 
 4     while n < max: 
 5         L.append(b) 
 6         a, b = b, a + b 
 7         n = n + 1 
 8     return L
 9  
10 for n in fab(5): 
11     print(n)
View Code

使用yield版本:

 1 def fab(max): 
 2     n, a, b = 0, 0, 1 
 3     while n < max: 
 4         yield b      # 使用 yield
 5         # print b 
 6         a, b = b, a + b 
 7         n = n + 1
 8  
 9 for n in fab(5): 
10     print(n)
View Code

简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

原文地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

posted on 2018-08-15 11:40  sammy1989  阅读(224)  评论(0编辑  收藏  举报

导航