当前位置: 首页 > news >正文

如何验证网站西宁做网站好的公司

如何验证网站,西宁做网站好的公司,wordpress api接口,wordpress邮件系统在我们使用Python编译过程中,yield 关键字用于定义生成器函数,它的作用是将函数变成一个生成器,可以迭代产生值。yield 的行为在不同的情况下会有不同的效果和用途。 1、问题背景 在 Python 中,“yield” 是一种生成器&#xff0…

在我们使用Python编译过程中,yield 关键字用于定义生成器函数,它的作用是将函数变成一个生成器,可以迭代产生值。yield 的行为在不同的情况下会有不同的效果和用途。

在这里插入图片描述

1、问题背景

在 Python 中,“yield” 是一种生成器(generator)的实现方式。生成器是一种特殊类型的迭代器(iterator),它可以在运行时动态产生值。然而,在某些情况下,使用生成器可能会遇到令人困惑的行为。

比如,下面有一个函数 x(),它产生一个生成器,该生成器每次调用 next() 方法时都会递减全局变量 a 的值并产生一个 yield 语句:

a = 5def x():global aif a == 3:raise Exception("Stop")a = a - 1yield a

现在,让我们在 Python shell 中调用这个函数并打印出生成的值:

>>> print(x().next())
4
>>> print(x().next())
3

到目前为止,一切正常。但是,如果我们把生成器函数的调用结果赋值给一个变量,然后使用这个变量来产生值,就会出现不同的行为:

>>> a = 5
>>> b = x()
>>> print(b.next())
4
>>> b.next()
StopIteration

这次,在第二次调用 b.next() 时,它没有产生值,而是引发了一个 StopIteration 异常。这是为什么呢?

2、解决方案

要理解这种行为,我们需要了解生成器的工作原理。

当我们调用一个生成器函数时,它并不会立即执行函数体,而是返回一个生成器对象(generator object)。这个生成器对象包含了函数体中的代码,但它不会在调用时执行。当我们使用 next() 方法来产生值时,生成器对象才会开始执行函数体。

在第一次调用 x() 时,我们创建了一个新的生成器对象。这个对象在执行函数体时遇到了 a == 3 这个条件,并引发了一个异常。然后,我们在 Python shell 中打印出了这个异常。

在第二次调用 x() 时,我们又创建了一个新的生成器对象。这个对象在执行函数体时仍然遇到了 a == 3 这个条件,并引发了异常。

但是,当我们把生成器函数的调用结果赋值给变量 b 时,情况发生了变化。这使得我们可以多次调用 b.next() 来产生值。当我们第一次调用 b.next() 时,生成器对象从上次中断的地方继续执行,并产生了值 4

然而,当我们第二次调用 b.next() 时,生成器对象已经执行到了函数体的末尾,没有更多的值可以产生了。因此,它引发了一个 StopIteration 异常。

为了更好地理解这种行为,我们可以使用一个 for 循环来遍历生成器:

def looping(stop):for i in looping(stop):yield i>>> looping(3).next()
0
>>> looping(3).next()
0

注意,每次我们创建一个新的生成器,循环都会从头开始。然而,如果我们存储一个生成器的引用,那么循环会继续从上次中断的地方继续执行:

>>> stored = looping(3)
>>> stored.next()
0
>>> stored.next()
1
>>> stored.next()
2
>>> stored.next()
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration

在循环期间,每次执行 yield 语句时,代码都会暂停;调用 .next() 继续从上一时间中断的地方继续执行函数。

StopIteration 异常是完全正常的;这是生成器传达它们已经完成的方式。一个 for 循环寻找这个异常来结束循环:

>>> for i in looping(3):
...     print(i)
...0
1
2

通过上述总结我们得知,yield 在不同的上下文中有不同的行为,但都涉及到生成器的创建或者协程的定义。所以说最终选择哪种模式还得更加自身情况来选择。

http://www.yayakq.cn/news/404705/

相关文章:

  • 岳阳网站开发收费专业微网站哪家专业
  • 手机网站打不开生鲜超市店面设计
  • 电商网站开发北京兰州网站维护
  • 程序_做彩票源码网站开发建湖做网站的公司
  • 百度爱采购网站个人网站模板 免费
  • 网站iis安全配置常州网站制作工具
  • 龙口建网站价格南宁网站开发培训学校
  • 在哪里可以建设网站joomla! 1.5 网站建设基础教程 :宁皓网
  • 网站调优技能国外风格网站
  • 网站做飘浮怎么做个人永久免费自助建站
  • 官方网站内容更新需要怎么做最好的手表网站
  • 地方门户网站建设方案用五百丁做名字的简历网站
  • 一个公司为什么要做网站湖南网站建设 地址磐石网络
  • 常德网站建设策划方案涉县专业做网站
  • 六安住房和城乡建设部网站贵州省高层建筑信息平台
  • 南昌做网站的公司哪个比较好的绍兴企业网站建站模板
  • 广州网站建设很棒 乐云践新电商定制开发
  • 网站被挂黑链怎么处理青岛网站开发费用
  • 网站title字数wordpress 集成paypal
  • 网站开发广告怎么写达内网站建设
  • 网站做自适应的好处湘潭网站建设 地址磐石网络
  • 个人主页网站设计代码网站建设设计目的
  • 邦策网站建设平台网站首页制作实验报告
  • 专业做营销网站建设最便宜的购物平台
  • 福州做网站的个体户电话查询网站建设的四个步骤
  • 中文商城html网站模板网站建设donglongyun
  • 网站修改解析怎么做微信小程序开发文档下载
  • 郑州网站优化的微博_腾讯微博被传媒公司骗了钱怎么办
  • 免费行情软件网站mnw帝国生成网站地图
  • 网站建设招标信息公司宣传册设计样本下载