浅析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

发布了44 篇原创文章 · 获赞 12 · 访问量 9087

猜你喜欢

转载自blog.csdn.net/ftimes/article/details/104967874