游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

学Python怎能不知yield?

  引言
  你可能听说过,带有yield的函数在Python中被称之为generator(生成器),又或者都没关注过,Python中还有个yield的存在。如果你了解过Python中的yield,那你知道何谓generator吗?
  yield的概念
  理解yield的generator概念,首先以一个常见的编程题目来展示yield的概念。
  如何生成斐波那契數列
  斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到。用计算机程序输出斐波那契數列的前N个数是一个非常简单的问题,有些Python基础的小伙伴都可以轻易写出如下函数:
  第1版本:简单输出斐波那契數列前N个数defcreateNum(count):n,a,b0,0,1whilencount:printba,bb,abnn1createNum(5)
  执行以上代码,我们可以得到如下输出:11235
  输出结果是没有问题的,但是版本1中的写法是直接在createNum函数中用print打印数字会导致该函数可复用性较差,因为createNum函数返回None,其他函数无法获得该函数生成的数列。
  要提高createNum函数的可复用性,最好不要直接打印出数列,而是返回一个List。以下是createNum函数改写后的第二个版本:
  第2版本:输出斐波那契數列前N个数defcreateNum(count):n,a,b0,0,1L〔〕whilencount:L。append(b)a,bb,abnn1returnLfornincreateNum(5):printn
  该版本中createNum函数返回的List的结果如下:11235
  改写后的createNum函数通过返回List能满足复用性的要求,但是与此同时也会存在一个明显的问题是:该函数在运行中占用的内存会随着参数count的增大而增大,如果要控制内存占用,最好不要用List来保存中间结果,而是通过iterable对象来迭代。在每次迭代中返回下一个数值,如此:内存空间占用很小。因为是直接返回一个iterable对象。
  第3版本:使用yield输出斐波那契數列前N个数defcreateNum(count):n,a,b0,0,1whilencount:yieldb使用yieldprint(b)a,bb,abnn1fornincreateNum(5):printn
  也可以手动调用createNum(5)的next()方法(因为createNum(5)是一个generator对象,该对象具有next()方法),这样我们就可以更清楚地看到createNum的执行流程:
  第4版本:执行流程defcreateNum(count):n,a,b0,0,1whilencount:yieldb使用yieldprint(b)a,bb,abnn1使用for循环来执行createNum()函数,它返回一个迭代值,下次迭代从yield语句的下一条语句继续执行!fornincreateNum(5):printn使用next方法来执行createNum()函数,generator(生成器)对象具有next()方法numcreateNum(5)print(next(num))print(next(num))print(next(num))print(next(num))print(next(num))print(next(num))
  运行以上代码,结果输出如下:11235Traceback(mostrecentcalllast):Filestdin,line1,inmoduleStopIteration
  由输出结果可发现在执行第6个print(next(num))时抛出一个StopIteration的异常,是因为在第5个print(next(num))执行完时函数已经结束,再执行第6个print(next(num))时,generator自动抛出StopIteration异常,表示迭代完成。在for循环里,无需处理StopIteration异常,循环会正常结束。
  yield的作用
  简单地讲,yield的作用就是把一个函数变成一个generator,带有yield的函数不再是一个普通函数,Python解释器会将其视为一个generator,调用createNum(5)不会执行createNum函数,而是返回一个iterable对象!
  在for循环执行时,每次循环都会执行createNum函数内部的代码,执行到yieldb时,createNum函数就会返回一个迭代值,下次迭代时,代码从yieldb的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到yield。
  yield使用场景迭代生成数据(生产者,数据量巨大时优势更加明显,它可以不占用大量内存)接收数据(消费者)中断(协作式的任务)
  总结
  一个带有yield的函数就是一个generator,它和普通函数不同,生成一个generator看起来像函数调用,但不会执行任何函数代码,直到对其调用next()(在for循环中会自动调用next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个yield语句就会中断,并返回一个迭代值,下次执行时从yield的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被yield中断了数次,每次中断都会通过yield返回当前的迭代值。
  yield的好处是显而易见的,把一个函数改写为一个generator就获得了迭代能力,比起用类的实例保存状态来计算下一个next()的值,不仅代码简洁,而且执行流程异常清晰。

比尔盖茨我为什么离婚2021年5月,微软创始人,亿万富翁比尔盖茨宣布与妻子Melinda离婚,两人已经在一起生活了27年,养育了三个孩子。这一消息震动了世界。比尔盖茨一生做了两件大事。前半生……国内做智能家居的厂商有哪些?可以说国内做智能家具的有很有多,不管是大的互联网巨头,还是一些不知名的小型家具公司,都在往这方面研发。如百度,小米,美的,京东,阿里巴巴,长虹,拓邦股份,欧瑞博等有很多的……华为鸿蒙正式上线,首批升级机型出炉,系统界面焕然一新华为鸿蒙正式上线操作系统一直是国产手机的痛点问题,因为这么多年过去了,国内手机厂商用的还是来自于美国谷歌公司的安卓系统。例如大家熟知的小米MIUI、OPPO的ColorO……一加手机到底能不能买?今年好像特别火?其实原因很简单刘作虎要向国内市场要量了,光靠一加9系列两款机型是不可能走起来大量的。毕竟一加9与一加9Pro都是为高端而生的,恰恰近两年国内最走量的机型在于3000元档次机型,……电商特供,价廉也要物美避免虚假宣传、质量不达标等问题电商特供,价廉也要物美近日,多地集中开展2022年春节期间打假专项行动,对较为畅销的电商特供等产品加强监督抽检,网友纷纷点赞。价……如何高效开展app的性能测试APP性能测试是什么从网上查了一下,貌似也没什么特别的定义,我这边根据自己的经验给出一个自己的定义,如有巧合纯属雷同。客户端性能测试就是,从业务和用户的角度出发,设……好物推荐华为Mate40Pro智能手机,搭载HarmonyO这屏显真的好惊艳,色彩啊细腻程度啊对比度啊,比某果漂亮!运行较流畅,出厂预装了一些没用的app,清理了一下就可以了。重点是相机!前置美颜很自然,就算关掉拍照也很棒,使用过……智能化场景领跑,海尔雷神者成为空调推荐首选品牌在全球逐渐走向疫情防控常态化的时期,空调行业也迎来了崭新的改革,消费者在购买空调产品的时候,关注焦点已经不再局限于制冷,制热或者节能等传统功能上面。他们对于一些同时兼顾了健康舒……12123便民服务全市车主,不用再跑车管所,一分钟搞定!免检什么是交管12123?交管12123是公安部互联网交通安全综合服务管理平台(简称互联网平台)网页、短信、手机APP、语音四种服务方式中的手机APP,是面向互联网平台个人注……8月新能源销量变天!Model3消失?秦PLUSDMi豪取第在节能减排主旋律的影响下,新能源汽车的需求量正不断扩大,并且带动销量增幅的持续攀升。今年8月,国内新能源汽车产销量创下了历史新高,首次突破30万辆大关,同比增长1。8倍,为今年……碧桂园创投独家领投电机进口替代公司三相科技A轮融资焦点财经讯盼盼2月8日,碧桂园创投披露,近日,高端高速一体化电机进口替代公司杭州三相科技宣布接连完成了A及A轮数千万人民币融资。其中A轮由碧桂园创投独家领投,A轮投资方包括立元……一千多块钱的液晶电视靠谱吗?一分价钱一分货,电视机也不例外,同样55寸的液晶电视,1000多块钱也能买一台,五六千七八千块也能买一台,虽然说尺寸来说都是一样的,但是包括机器的配置,做工以及用料都有很大的差……
爆火丁真在AI面前颜值多少分?文章目录前言一、具体过程1。百度AI平台申请密钥2。python代码实现3。结果二、悄悄看看明星的颜值分彭于晏王力宏Lisa前言最近网络上爆火的藏族小哥哥丁真,大家都知道……现价2999元的小米10S是否值得入手?小芳入手小米10S这款手机也有2个多月的时间了,整体体验还是非常不错的。接下来小芳就和大家聊一聊这款手机的用机体验,希望能够帮助到大家。外观方面:小米10S这款手机就是众……中信银行科技加速度,服务有温度推进个人养老金融生态建设中信银行作为国有股份占比最高的全国性股份制商业银行,积极践行国家战略,战略性推进个人养老金融生态建设,通过科技赋能,提供有温度的服务,并提出构建覆盖全生命周期养老金融服务体系的……宇航员登陆月球的时候,无法返回怎么办?在电影《火星救援》中,演员是美国国家航空航天局的宇航员。人类当时计划前往火星,以在火星上建立适宜人类生存的基地。但是在执行任务的过程中,男主角不小心留在了火星上,其他同伴顺利返……怎样选择固定式条码扫描器?工业固定式扫描器助力自动化设备行业怎样选择固定式条码扫描器?工业固定式扫描器助力某自动化设备行业近不少客户朋友咨询生产流水线、传送带上面的条码扫描和自动识别解决办法,一般生产流水线上使用较多的是工业级固定……卓文智慧用电平台,让用电可视化智能化便捷化第二次工业革命,电气时代来临,本质上人类学会了用电,学会了将机械能转化为电能。第二次工业革命把社会的工业化提高到一个崭新阶段,使社会生产力进入电力时代。图源网络如今……三星即将召开发布会或发布屏下摄像头小米解锁进步最快的五百强【最年轻的世界五百强解锁了进步最快的世界五百强新成就】小米入选2021《财富》世界500强,排名第338位。较去年上升84位,成为互联网相关企业中进步最快的世界500强企……threezero出12cm小比例大黄蜂!造型超酷卖390元最近threezero公布了一个新系列,名为MDLX,首款产品又是我们的老朋友大黄蜂,虽然我个人对于大黄蜂多少有些审美疲劳了,但这款大黄蜂还是让我颇为期待的,咱们一起来看看他的……让孩子走进社会,融合教育是必须的我相信很多家长为了自己的自闭症宝宝,采取机构干预,或者在家里自己训练。然而,这远远不够。我们的目标是让自闭症儿童回归主流,融入社会,所以一体化教育是极其重要的。所谓综合教……推荐5个超级好用的网站!全是精品给大家带来几个超级实用又好玩的网站!每一个都是精品,无论是工作还是生活,绝对有你用的到的!一、今日热榜这是一个专门提供各站热榜聚合的网站,你可以在这里查看各个……年关将近,注意用电安全过平安幸福年年关将近,大街上张灯结彩,四处洋溢着喜悦的气氛。虽然大家都沉浸在过年的快乐氛围中,但也要注意消防安全,时刻警惕身边存在的种种隐患,杜绝隐患变灾难的可能性,过一个平安幸福的新年。……1。43亿元拍得3处萤石探矿权,房地产公司转型进军氟化工行业施达矿业以1。43亿元,拍得普安、晴隆3处萤石矿探矿权,进军氟化工科技产业赛道,助力乡村振兴和地方经济高质量发展。施达集团转型升级,进军高科技氟化工行业2021年1……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网