浅析Python迭代器/生成器中的generator.send() 【女神与渣男不得不说的故事】

一、生成器简介

在Python通过生成器,我们可以自己生成自己的 ‘迭代器’ (这个描述是不严谨的,单纯为了方便理解)
生成器的构造比较简单,主要是使用一个yiled关键字来进行声明。
运行到yield的之后,会产生一个类似操作系统里讲的 ‘挂起’ 的操作。
结合一个demo来解释

def fun():
    r = 1
    while True:
        r += 1
        temp = yield r 
        print('r is {} '.format(r))
        print('temp is {}'.format(temp))
f = fun()
  1. 输入next(f)
    我们可以看到,在yield处停止了,并没有执行后面print
    在这里插入图片描述
  2. 第二次输入next(f)
    我们可以看到,如同迭代器一样,往后移动了一步。并且执行了print语句。
    在这里插入图片描述

以上就是生成器的简单介绍,下面我们将理解send()

二、generator.send()

用例依然跟上一段一样

我们输入 f.send(10086)
可以看到,f.send()至少完成了两个操作:

  1. 迭代器向前进一步
  2. 给temp赋了一个值
    在这里插入图片描述

在网络上,对generator.send()我们可以找到这样的解释:

send:用于传递参数,实现与生成器的交互。

下面谈谈我的个人理解(未严格考证,仅供参考):

temp = yield r

我们可以把yield的想象成一个特殊的函数。
[舔狗]<–>[女神和爱]<–>[渣男]
[temp]<–>[yield r]<–>[新迭代对象]

一般情况下,女神不理舔狗的,对渣男就不一样了,只要渣男需要(next操作),就把爱®送到渣男手里
渣男要多少次女神给多少次,所以迭代器具有无限性。
如果渣男想利用舔狗,就可以在女神来送爱的时候告诉女神:“你给舔狗说一声,帮我写个论文。”
女神送完爱,回去给舔狗打了个电话:“帮我写个论文。”
在程序里,我们可以使用generator.send()方法,给舔狗传递信息。
在这里插入图片描述
然后我们可以写一个判断语句,判断temp的内容进行后续的操作。

这大概就是generator.send()的意义所在吧,提供了一个交互性。

舔到最后一无所有,希望大家都能够活出尊严 TOT

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值