生成器
生成器是一次生成一个值的特殊类型函数。可以将其视为可恢复函数。调用该函数将返回一个可用于生成连续 x 值的生成器【Generator】,简单的说就是在函数的执行过程中,yield语句会把你需要的值返回给调用生成器的地方,然后退出函数,下一次调用生成器函数的时候又从上次中断的地方开始执行,而生成器内的所有变量参数都会被保存下来供下一次使用。 ---------------------来自百度百科
生成器是Python中一种特有的类型。其表现为每调用一次生成一次值并保存上一次的状态。特点 占用内存很小,可以进行延时操作,需要时再调用。关键字yield是生成器的一个标志,每次调用时函数停在这个位置保持上一次状态并返回被yield修饰的值
生成器的写法
def func1(x): pass def func2(n): pass #生成器1,func1应为改变x的值其中func2应为可迭代对象 generator1 = (func1(x) for x in func2(10)) def generator(n): for i in range(n): yield i * i for i in generator(10): print(i) for i in generator1: print(i)
生成器本质上是个函数,用yield代替了return当无值可以返回时,raise StopIteration,StopIteration后接的错误是生成器最后调用时return所修饰的值,所以可以抓取StopIteration错误来获取生成器状态
def hello(n): for i in range(n): print("Hello") yield i return "Yeah" g = hello(10) for i in g: pass #在遍历完以后无值可用引发StopIteration错误 next(g) #StopIteration Yeah
需注意的事项:一个生成器只能生成函数内所能生成的最大个数值,当使用完后自动引发StopIteration,无论再调用多少次next()方法都只会引发StopIteration并不会返回值