python学习(通俗易懂的生成器)

1、简单理解生成器

那什么是迭代器? 
我们可以理解为我们平时做一件事的步骤。

比如我们泡茶: 
首先,得去煮水。 
然后,拿出茶具,和茶叶 
接着,水开了,就开始泡茶 
最后,就是品茶了。

假如我们定义了一个泡茶的函数(迭代器),然后将泡茶步骤的方法封装进这个函数。每一次调用这个函数就返回一个步骤,并保存好当前执行到哪个状态。如果中途有事,比如我们执行到步骤二的时候突然去接了个电话,回来调用这个函数就会得到步骤三(水开了,就开始泡茶),也就是状态保存好了。我们可以执行这个泡茶函数直到调用完所有步骤为止。 
定义一个方法,这个方法是一步步执行的,并能保存状态,这就是迭代器。

回到上面上面第二种访问方法中,到第六个print(next(gen))时,系统告诉我们Traceback (most recent call last): StopIteration。也就是gen迭代到最后了,无法继续迭代了。

以上摘自https://blog.csdn.net/weixin_37720172/article/details/78482291

 

2、细看生成器执行步骤

#-*-coding:UTF-8-*-
def simple_generator():
    x=1
    yield x  #第一次调用next(),执行到这里就停下,返回x
    x+=1
    yield x  #第二次调用next(),从上次停下的地方继续执行到这里
    yield x

obj=simple_generator()#当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象
print next(obj)
print next(obj)
print next(obj)
print next(obj)

 

  1. 当你调用simple_generator()这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象,而且这个对象可迭代,就是可以用   for x in 对象   的结构

  2. 第一次next()后: (绿色部分为已经执行部分)(红色部分为未执行部分)

  3.         def simple_generator():
                x=1
                yield x  
    #第一次调用next(),执行到这里就停下,返回x
                x+=1
                yield x  
    #第二次调用next(),从上次停下的地方继续执行到这里
                yield x 
  4. 第二次next():
  5.         def simple_generator():
                x=1
                yield x
     #第一次调用next(),执行到这里就停下,返回x
                x+=1
                yield x  
    #第二次调用next(),从上次停下的地方继续执行到这里
                yield x 
  6. 第三次next():
  7.          def simple_generator():
                x=1
                yield x  
    #第一次调用next(),执行到这里就停下,返回x
                x+=1
                yield x  
    #第二次调用next(),从上次停下的地方继续执行到这里
                yield x
  8. 第三次next():已经没有输出了,这说明生成器只能遍历一次
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值