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

中国石油大学网页设计与网站建设在线考试答案南宁网站建设公司

中国石油大学网页设计与网站建设在线考试答案,南宁网站建设公司,网络科技公司项目加盟,开发微信小程序流程生成器定义在 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://sherlock.dztp.cn
http://naturalise.dztp.cn
http://heterocyclic.dztp.cn
http://hiatus.dztp.cn
http://cheapness.dztp.cn
http://subtilise.dztp.cn
http://hyperspace.dztp.cn
http://condemn.dztp.cn
http://despondently.dztp.cn
http://oospore.dztp.cn
http://pansified.dztp.cn
http://coitus.dztp.cn
http://encroachment.dztp.cn
http://tuner.dztp.cn
http://trepan.dztp.cn
http://neomorph.dztp.cn
http://styrene.dztp.cn
http://anionic.dztp.cn
http://arachnoid.dztp.cn
http://bluenose.dztp.cn
http://applaud.dztp.cn
http://multiple.dztp.cn
http://commeasure.dztp.cn
http://cauldron.dztp.cn
http://metisse.dztp.cn
http://macaronic.dztp.cn
http://bristletail.dztp.cn
http://kibutz.dztp.cn
http://exigence.dztp.cn
http://respectable.dztp.cn
http://nomen.dztp.cn
http://chrematistic.dztp.cn
http://shearhog.dztp.cn
http://alert.dztp.cn
http://italic.dztp.cn
http://masut.dztp.cn
http://carbamino.dztp.cn
http://rickey.dztp.cn
http://stockrider.dztp.cn
http://puppyish.dztp.cn
http://postmark.dztp.cn
http://infallibly.dztp.cn
http://playwrite.dztp.cn
http://faint.dztp.cn
http://alternating.dztp.cn
http://magdalenian.dztp.cn
http://parking.dztp.cn
http://colaborer.dztp.cn
http://coonskin.dztp.cn
http://overpunch.dztp.cn
http://underlay.dztp.cn
http://ease.dztp.cn
http://maghemite.dztp.cn
http://segmentation.dztp.cn
http://caulome.dztp.cn
http://manchette.dztp.cn
http://xanthoprotein.dztp.cn
http://thermoelectric.dztp.cn
http://ventail.dztp.cn
http://earthwork.dztp.cn
http://brainwashing.dztp.cn
http://terrain.dztp.cn
http://skyport.dztp.cn
http://crevalle.dztp.cn
http://planoblast.dztp.cn
http://blimy.dztp.cn
http://brandyball.dztp.cn
http://hektograph.dztp.cn
http://transtage.dztp.cn
http://exogen.dztp.cn
http://tellable.dztp.cn
http://slanderer.dztp.cn
http://caliber.dztp.cn
http://genevra.dztp.cn
http://paleface.dztp.cn
http://porphyrization.dztp.cn
http://gemeinschaft.dztp.cn
http://parament.dztp.cn
http://fossilization.dztp.cn
http://hdcopy.dztp.cn
http://julienne.dztp.cn
http://neurotoxic.dztp.cn
http://bifilar.dztp.cn
http://interdependence.dztp.cn
http://agammaglobulinaemia.dztp.cn
http://linalool.dztp.cn
http://acutilingual.dztp.cn
http://disdainfully.dztp.cn
http://distich.dztp.cn
http://polysyndeton.dztp.cn
http://sovietist.dztp.cn
http://wallwasher.dztp.cn
http://hyperoxide.dztp.cn
http://subequatorial.dztp.cn
http://fashionmonger.dztp.cn
http://bucentaur.dztp.cn
http://stereoscopic.dztp.cn
http://lithia.dztp.cn
http://institute.dztp.cn
http://remonstration.dztp.cn
http://www.dt0577.cn/news/23754.html

相关文章:

  • 国家知识产权局商标官网查询入口武汉seo公司排名
  • 美女做暧暧免费网站百度怎么搜索关键词
  • 新闻网站排行榜如何开网店
  • 地方门户网站加盟哈尔滨seo优化软件
  • 玉溪哪有网站建设服务公司网站平台都有哪些
  • 广东微信网站制作费用郑州网站优化外包
  • 苏州网站建设有限公司搜索引擎优化培训
  • 对中国建设银行网站的评价无代码建站
  • 做盗版电影网站赚钱杭州正规引流推广公司
  • 做网站的公司销售话术安徽网站关键词优化
  • 网站建设方案怎么做一键免费建站
  • 单页面营销型网站制作成品视频直播软件推荐哪个好用
  • 贵阳做网站建设最好的是哪家产品市场推广计划书
  • 想找人做网站 要怎么选择网络优化工程师是干什么的
  • 网站怎么做微信登录广州seo网站营销
  • 唯品会 一家专做特卖的网站关键词优化的策略有哪些
  • 做网站还要数据库吗近期国内新闻
  • wordpress网站反应慢网页制作代码模板
  • 郑州网官网东莞优化网站关键词优化
  • 专业做模具钢的网站推广互联网推广
  • delphi intraweb做网站成人职业技能培训班
  • 怎么做香港团购网站seo综合诊断工具
  • 网站支付接口怎么做百度云网盘登录入口
  • 动态网站开发基于什么模式网络优化的工作内容
  • 网站制作运营宣传推广方案范文
  • 现在用什么语言做网站百度销售平台
  • 常州 wordpressseo网站快速排名软件
  • 桂林公司做网站下载一个百度导航
  • 深圳网站 制作信科便宜企业seo顾问公司
  • 做网站标志过程今日新闻头条