当前位置:首页 > 房产信息

yield 深入理解yield

英语单词“产量”的意思是“生产”。刚接触Python的时候,很迷茫,一直不理解yield的用法。

只要大致知道yield可以用来为一个函数返回值plug数据,比如下面的例子:

默认列表(列表):

fori inalist:

yieldi +1

把单子上的每一项都拿出来,然后把i+1放进去。然后通过呼叫取出每个项目:

ist =[1,2,3,4]

forx inaddlist(列表):

打印x,

这确实是产量应用的一个例子

1.包含产量的函数

如果看到一个函数包含yield,说明这个函数已经是一个Generator了,它的执行会和其他普通函数不一样。例如,以下简单函数:

defh:

打印“勇敢”

产量5

h

可以看到调用h后,print语句没有执行!这就是收益率,那么,如何让print语句执行呢?这是后面要讨论的问题。经过讨论和研究,我们就明白了屈服的工作原理。

2.产量是一种表达方式

在Python2.5之前,yield是一个语句,但现在在2.5中,yield是一个表达式,例如:

m =产量5

表达式(yield 5)的返回值会赋给m,所以认为m = 5是错误的。那么如何得到(收益率5)的返回值呢?需要Send(msg),后面会介绍。

3.通过下一句话来看原理

现在,让我们揭示收益率是如何工作的。我们知道,上面的h在被调用后是不执行的,因为它有一个yield表达式,所以我们让它通过下一条语句执行。下一条语句将继续生成器的执行,直到下一个yield表达式。例如:

defh:

打印“01”

产量5

打印' 02!'

c =h

c .下一步

C.在c.next调用之后,h开始执行,直到产生5:

当我们再次调用c.next时,我们将继续执行,直到找到下一个yield表达式。因为背后没有屈服,所以会抛出异常:

追溯(最近一次通话持续时间):

文件"/home/test/yield.py ",第11行,in & lt模块>

c .下一步

停止迭代

4.发送(消息)和下一个

在理解了下一步如何让包含yield的函数执行之后,让我们看看另一个非常重要的函数,send(msg)。其实next和send在某种意义上有类似的功能。区别在于send可以传入yield表达式的值,而next不能传入特定的值,只能传入None。因此,我们可以看到

C.next和c.send(None)功能相同。

请看这个例子:

defh:

打印' 01 ',

m =yield5 # 02!

打印m

d =产量12

印刷‘我们在一起!'

c =h

C.next #相当于c.send(无)

c.send('02!')#(产量5)表达式被赋给' 02!'

需要提醒的是,第一次通话时,请使用下一条语句或发送(None)。不能用send发送非None值,否则会出错,因为没有接收该值的yield语句。

5.发送(消息)和下一个的返回值

Send(msg)和next都有返回值,而且它们的返回值非常特殊,都是返回下一个yield表达式的参数。例如,收益率5,它返回5。过来,你懂什么吗?在本文的第一个例子中,遍历列表中的生成器实际上是调用列表。下一次每次,和list的返回值。接下来每一次都只是收益率的参数,也就是我们开始认为的被推入。让我们继续上面的例子:

一个

2

10

defh:

印刷《文传》,

m =屈服5 #战斗!

printm

d =产量12

打印“我们在一起!”

c =h

M =c .下一个#m获取产量5的参数值5

d =c.send('战斗!')#d获取产量12的参数值12

打印'我们永远不会忘记日期',m,'。,d

输出结果:

一个

2

文川格斗!

我们永远不会忘记日期。12

6.抛出并关闭中断发生器

中断生成器是一种非常灵活的技术,它可以通过抛出GeneratorExit异常来终止生成器。Close方法的作用是一样的,其实它内部调用的是throw(GeneratorExit)。让我们看看:

一个

2

defclose(自):

尝试:

self.throw(GeneratorExit)

除了(生成退出,停止迭代):

通过

else:

raiseRuntimeError("发电机忽略发电机退出")

#没有捕捉到其他异常

因此,当我们调用close方法,然后调用next或send(msg)时,将引发异常:

一个

2

追溯(最近一次通话持续时间):

文件"/home/evergreen/Codes/yild . py ",第14行,in & lt模块>

d = c.send('战斗!')#d获取产量12的参数值12

停止迭代

1.《yield 深入理解yield》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《yield 深入理解yield》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/fangchan/1495814.html

上一篇

身份证号码大全18 “你妈就是你妈了” 苏州又取消50种证明

下一篇

7类人最容易短命 面相师傅告诉你,7种手相断一生,第6种注定短命!

三元表达式 在 React 条件渲染中使用三元表达式和 “&&”

三元表达式 在 React 条件渲染中使用三元表达式和 “&&”

[新产品上线] 51CTO播客,随时随地碎片化学习 反应组件可以通过多种方式决定渲染内容。您可以使用传统的if语句或switch语句。在本文中,我们将探索一些替代方案。但要注意,如果不小心,有些方案会自带陷阱。 三元表...

三元运算符 在 React 条件渲染中使用三元表达式和 “&&”

三元运算符 在 React 条件渲染中使用三元表达式和 “&&”

[新产品上线] 51CTO播客,随时随地碎片化学习 反应组件可以通过多种方式决定渲染内容。您可以使用传统的if语句或switch语句。在本文中,我们将探索一些替代方案。但要注意,如果不小心,有些方案会自带陷阱。 三元表...

如何生产口罩 废弃10年的口罩生产线如今单机日产量超7万个 如何做到?

中国宁波网记者孙佳丽2月24日,随着机器的轰鸣声,盛骏电子汽车并行显示系统生产车间每秒钟生产两个口罩。据了解,废弃10多年的口罩生产线经过15天的修复调试,已经“脱胎换骨”。现在单条生产线日均产量已经达到7万到10万个...

口罩生产设备 废弃10年的口罩生产线如今单机日产量超7万个 如何做到?

中国宁波网记者孙佳丽2月24日,随着机器的轰鸣声,盛骏电子汽车并行显示系统生产车间每秒钟生产两个口罩。据了解,废弃10多年的口罩生产线经过15天的修复调试,已经“脱胎换骨”。现在单条生产线日均产量已经达到7万到10万个...

冬捕 走进东钱湖冬捕:今年冬捕产量大约在15万公斤以上

图为渔民在网基捕鱼。每年冬季捕到的鱼将有15万公斤在广阔的东钱湖上,渔民们聚集在网基周围,用手捞起一张装满鱼的网。网基里的鱼不停地跳出水面,场面很热闹。对于这次的冬季捕捞,渔民前几天比较忙,从湖中拖了两个3000米左右...

经典英语句子 那些美到窒息的英文句子,句句经典

  • 经典英语句子 那些美到窒息的英文句子,句句经典
  • 经典英语句子 那些美到窒息的英文句子,句句经典
  • 经典英语句子 那些美到窒息的英文句子,句句经典

相信自己的激励句子 励志语句:相信自己能力的人,任何事情都能够做到。

  • 相信自己的激励句子 励志语句:相信自己能力的人,任何事情都能够做到。
  • 相信自己的激励句子 励志语句:相信自己能力的人,任何事情都能够做到。
  • 相信自己的激励句子 励志语句:相信自己能力的人,任何事情都能够做到。

马斯克要求提升产量

来源:新浪科技据报道,在强调公司必须实现较高的利润率之后,特斯拉CEO埃隆·马斯克(Elon Musk)最近给员工发送了一封信,他在这封信中谈到了特斯拉当前的首要任务:提升产量。马斯克表示,公司留意到,当前市场对电动汽...