生成器

生成器是一次生成一个值的特殊类型函数。可以将其视为可恢复函数。调用该函数将返回一个可用于生成连续 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并不会返回值