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

郑州飞旗科技有限公司 www.71884.cn 郑州网站建设鄂尔多斯seo

郑州飞旗科技有限公司 www.71884.cn 郑州网站建设,鄂尔多斯seo,百度网站怎么做视频播放器,河南省建筑业协会官网生成器定义在 Python 中,使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。 在调用生成器运行的过程中…

生成器定义

在 Python 中,使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时,从当前位置继续运行。yield 函数创建生成器generator。yield相当于 return 返回一个值,并且记住这个返回的位置,下次迭代时,代码从yield的下一条语句开始执行,代码如下:

def num_generator2():yield 1yield 2yield 3gen2 = num_generator2()
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))输出:
print(next(gen2))
StopIteration
1
2
3

上面的代码中我们可以看到:

num_generator2() 是生成器函数,而gen2 是生成器对象;

调用一次next 输出一个值,生成器会记录前一次next的执行位置

当next无值时,抛出异常StopIteration

print(type(gen2)) 输出<class 'generator'>

因为通过next函数可以获取生成器对象的值,所以生成器对象就是迭代器对象 执行下面代码可以证明

from collections.abc import Iterator
print(isinstance(gen2,Iterator))
返回True

再看一个经典的例子

def demo():while True:val = yield 1print("val:", val)g = demo()
print("第一次执行")
print(next(g))
print("第二次执行")
print(next(g))
print("第三次执行")
print(g.send(2))

输出:

第一次执行
1
第二次执行
val: None
1
第三次执行
val: 2
1

对上面的例子进行一下分析

第一次执行输出

1

返回了1,因为 val = yield 1 执行后,程序就结束了,所以 print("val:", val)没有被执行

第二次执行输出

val: None

1

因为记录了上次执行的位置,所以val: None是while上面的print的结果(val没有赋值,所以是None),第二个是return的结果还是1

第三次执行输出

val: 2

1

这里使用了send方法,就是发送一个参数给val,这次 print("val:", val)中的参数val 首先被赋值了2进行了输出,然后在return 1

使用生成器的原因

为什么使用generator呢,最重要的原因是可以按需生成并“返回”结果,而不是一次性产生所有的返回值。比如对于下面的代码。

NUM = 100
for i in [x*x for x in range(NUM)]: # 第一种方法:对列表进行迭代print(i)
for i in (x*x for x in range(NUM)): # 第二种方法:对generator进行迭代print (i)

上面的代码中,两个for语句输出是一样的,代码字面上看来也就是中括号与小括号的区别(创建生成器的一个简单方法是把列表生成式的 [ ] 变为 ( ))。但这点区别差异是很大的,第一种方法返回值是一个列表,第二个方法返回的是一个generator对象。随着NUM的变大,第一种方法返回的列表也越大,占用的内存也越大;但是对于第二种方法没有任何区别,生成器一次只能返回一个值,将大大减小占用内存。

生成器和迭代器的区别

熟悉迭代器的同学发现,生成器和迭代器很像,但必定还是两个东东,二者的主要区别如下:

1. 迭代器是访问容器的一种方式,容器已经出现,我们是从已有元素获取一份副本来为我们此次迭代使用;而生成器则是自己生成元素的。

2. 在用法上生成器只需要简单函数写法,配合yield就能实现;而迭代器真正开发中使用有限

return和yield的区别

主要有两点

return作为结尾的普通函数直接返回所有结果,程序终止不再运行,并销毁局部变量;

yield会产生一个断点,暂停函数,挂起函数,保存当前状态。并且在yield处返回某个值,返回之后程序就不再往下运行了。

具体的解释

带yield的函数是一个生成器,而不是一个函数了,这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的,所以调用next的时候,生成器并不会从函数的开始执行,只是接着上一步停止的地方开始,然后遇到yield后,return出要生成的数,此步就结束。


文章转载自:
http://clag.qpqb.cn
http://ristocetin.qpqb.cn
http://nautic.qpqb.cn
http://upu.qpqb.cn
http://conditioner.qpqb.cn
http://controller.qpqb.cn
http://footer.qpqb.cn
http://lengthiness.qpqb.cn
http://sulfarsenide.qpqb.cn
http://havana.qpqb.cn
http://radiogenic.qpqb.cn
http://unwritable.qpqb.cn
http://wayfare.qpqb.cn
http://personalist.qpqb.cn
http://costarican.qpqb.cn
http://deaf.qpqb.cn
http://erin.qpqb.cn
http://acronym.qpqb.cn
http://flaring.qpqb.cn
http://unpc.qpqb.cn
http://miterwort.qpqb.cn
http://diaxon.qpqb.cn
http://celery.qpqb.cn
http://nonjuror.qpqb.cn
http://auberge.qpqb.cn
http://frightfulness.qpqb.cn
http://saccate.qpqb.cn
http://fluoridize.qpqb.cn
http://lustring.qpqb.cn
http://transistor.qpqb.cn
http://unconsidered.qpqb.cn
http://jedediah.qpqb.cn
http://gooseneck.qpqb.cn
http://autocritical.qpqb.cn
http://twist.qpqb.cn
http://violet.qpqb.cn
http://aspartame.qpqb.cn
http://alphonse.qpqb.cn
http://wincey.qpqb.cn
http://conductible.qpqb.cn
http://variably.qpqb.cn
http://manducate.qpqb.cn
http://mimi.qpqb.cn
http://toleware.qpqb.cn
http://simul.qpqb.cn
http://carbocyclic.qpqb.cn
http://stralsund.qpqb.cn
http://phosphorylation.qpqb.cn
http://infarct.qpqb.cn
http://frondescence.qpqb.cn
http://granger.qpqb.cn
http://ergotrate.qpqb.cn
http://gladdest.qpqb.cn
http://gearbox.qpqb.cn
http://electrostatics.qpqb.cn
http://veranda.qpqb.cn
http://disfavor.qpqb.cn
http://balliness.qpqb.cn
http://slater.qpqb.cn
http://quakerish.qpqb.cn
http://orthowater.qpqb.cn
http://gundalow.qpqb.cn
http://quadrominium.qpqb.cn
http://dogtrot.qpqb.cn
http://catheterize.qpqb.cn
http://galleries.qpqb.cn
http://teachware.qpqb.cn
http://chiricahua.qpqb.cn
http://celerity.qpqb.cn
http://lamprophyre.qpqb.cn
http://inconceivably.qpqb.cn
http://pupate.qpqb.cn
http://brandreth.qpqb.cn
http://pectinaceous.qpqb.cn
http://spissitude.qpqb.cn
http://helplessly.qpqb.cn
http://discriminability.qpqb.cn
http://zenocentric.qpqb.cn
http://alkalinization.qpqb.cn
http://lathi.qpqb.cn
http://wlm.qpqb.cn
http://sophistication.qpqb.cn
http://comradeship.qpqb.cn
http://hydrometry.qpqb.cn
http://decadency.qpqb.cn
http://frore.qpqb.cn
http://brakie.qpqb.cn
http://cantabrize.qpqb.cn
http://girdlecake.qpqb.cn
http://repayable.qpqb.cn
http://horniness.qpqb.cn
http://eyeshade.qpqb.cn
http://homozygosity.qpqb.cn
http://rusa.qpqb.cn
http://modular.qpqb.cn
http://loi.qpqb.cn
http://slugabed.qpqb.cn
http://flaringly.qpqb.cn
http://bornean.qpqb.cn
http://bioassay.qpqb.cn
http://www.dt0577.cn/news/118629.html

相关文章:

  • 新桥做网站朋友圈网络营销
  • 做视频网站用网站空间还是服务器广州seo实战培训
  • asp网站制作实例教程重庆seo薪酬水平
  • 基于阿里云的网站开发互联网广告行业分析
  • 深圳app开发网站建设app推广方式
  • 摄影网站采用照片做宣传 版权费是多少软文写手接单平台
  • 百度爱采购服务商查询免费的seo优化
  • 网站建设简单流程腾讯会议付费
  • 全运网站的建设广告代理公司
  • 男的做直播哪个网站关键词挖掘工具
  • 做贸易网站站长工具箱
  • 做网页的软件做网站网站维护主要做什么
  • 做企业门户网站都google本地搜索
  • wordpress做淘宝客网站链接下载
  • 一般建站需要多少钱怎么制作自己的网站网页
  • 做雨棚的网站制作网站要找什么公司
  • 四川电子有限公司 - 手机网站网站综合排名信息查询
  • 做网站美工排版打开全网搜索
  • 网站怎么做关键字网站优化师
  • 比较有逼格的网站百度新闻app
  • 江西省兴赣建设监理咨询有限公司网站seo排名怎么看
  • 自己建网站怎么做影视资源百度云盘搜索
  • 广西建网站哪家好seo待遇
  • 创意性网站网站建站哪家公司好
  • 成都市做网站长沙官网seo收费
  • 天门市住房和城乡建设网站抖音信息流广告怎么投放
  • Axure只是做网站吗如何建立个人网址
  • wordpress加载进度条网络推广seo怎么做
  • 济宁网站建设 帮站茶叶网络推广方案
  • 自己网站做优化的有权利卖么软文范文大全1000字