yield关键字在生成器中使用。要了解其行为,让我们首先看看什么是可迭代的。Python对象列表,文件,字符串等称为可迭代对象。语法中可以使用for ..遍历的任何对象都是可迭代的。迭代器对象也是可迭代的,但是只能迭代一次。迭代器对象可以使用iter()
函数从任何可迭代的对象获取,并且具有next()
使用迭代方法进行迭代的方法。
>>> L1 = [1,2,3,4] >>> I1 = iter(L1) >>> while True: try: print (next(I1)) except StopIteration: sys.exit()
生成器看起来类似于函数,但是它通过yield关键字在迭代器中生成连续项。
调用生成器函数时,它甚至不开始执行该函数就返回迭代器对象。next()
首次调用该方法时,该函数开始执行直到到达yield语句,该语句返回yield值。收益保持跟踪,即记住上一次执行,第二次next()
调用从先前的值继续。
下面的示例生成一个包含Fibonacci系列数字的迭代器。每次调用生成器函数都会fibo()
产生Fibonacci系列中的连续元素。
import sys def fibo(n): a,b=0,1 while True: if a>n : return yield a a, b = b, a+b f = fibo(20) while True: try: print (next(f)) except StopIteration: sys.exit()