yield , 初碰见不太可能会明白是什么意思. 从这里可以看出python的特点, 由于在背后做了大量的隐藏的工作, 才使得形式和使用上边的简洁和优美.
这是一个很不好理解的概念, 请参考下面这两篇文章:
总结下来,
1, 包含yield的函数是generator.
2, yield是表达式, 和return类似, 但是返回的是generator.
这篇文章写的很好, 从一个"如何生成斐波那契數列" 的例子开始. 从中能学到很多东西. 仔细看看这篇文章.
看看这个例子, 当最后两行写出优美简介的循环时, 其实背后做了很多事情, 这再次说明了python的特点. 这绝对是一门易学难精的语言.
# 利用 iterable 我们可以把 fab 函数改写为一个支持 iterable 的 class,以下是第三个版本的 Fab:# 你可以尝试一下去掉 __iter__ 这个函数的定义会发生什么class Fab(object): def __init__(self, max): self.max = max self.n, self.a, self.b = 0, 0, 1 def __iter__(self): return self def next(self): if self.n < self.max: r = self.b self.a, self.b = self.b, self.a + self.b self.n += 1 return r raise StopIteration() for n in Fab(8): print(n)
为了易用和简洁, 不惜创造出了yield的这个魔法, 在形式之美的背后, 是迭代器, 生成器等众多手段.
# 使用yield的方式def fab(max): n, a, b = 0, 0, 1 while n < max: yield b # print b a, b = b, a + b n += 1 for n in fab(8): print(n)