Python 生成器

生成器

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

转载于:https://www.cnblogs.com/the-moon-so-beautiful/p/8449728.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值