范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

python生成器

  迭代器的好处是可以节省内存,如果在某些情况下,我们也需要节省内存,就只能自己写。我们自己写的这个能实现迭代器功能的东西就叫生成器。 python中提供的生成器
  1.生成器函数 :常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行
  2.生成器表达式 :类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表 生成器Generator:
  本质:迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现)
  特点:惰性运算,开发者自定义 生成器函数
  一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值,但是yield又不同于return,return的执行意味着程序的结束,调用生成器函数不会得到返回的具体的值,而是得到一个可迭代的对象。每一次获取这个可迭代对象的值,就能推动函数的执行,获取新的返回值。直到函数执行结束。import time   def genrator_fun1():     a = 1     print("现在定义了a变量")     yield a     b = 2     print("现在又定义了b变量")     yield b   g1 = genrator_fun1() # 不执行函数 得到一个生成器对象 print("g1 : ", g1)  # 打印g1可以发现g1就是一个生成器 注意这里并没有执行函数 print("-" * 20)  # 我是华丽的分割线 print(next(g1)) time.sleep(1)  # sleep一秒看清执行过程 print(next(g1))  """ g1 :   -------------------- 现在定义了a变量 1 现在又定义了b变量 2 """
  生成器有什么好处呢?就是不会一下子在内存中生成太多数据
  假如我想让工厂给学生做校服,生产2000000件衣服,我和工厂一说,工厂应该是先答应下来,然后再去生产,我可以一件一件的要,也可以根据学生一批一批的找工厂拿。
  而不能是一说要生产2000000件衣服,工厂就先去做生产2000000件衣服,等回来做好了,学生都毕业了… def produce():     """生产衣服"""     for i in range(2000000):         yield "生产了第%s件衣服" % i   product_g = produce() print(product_g.__next__())  # 要一件衣服 print(product_g.__next__())  # 再要一件衣服 print(product_g.__next__())  # 再要一件衣服 print("----------------分割线---------------------") num = 0 for i in product_g:  # 要一批衣服,比如5件     print(i)     num += 1     if num == 5:         break  """ 生产了第0件衣服 生产了第1件衣服 生产了第2件衣服 ----------------分割线--------------------- 生产了第3件衣服 生产了第4件衣服 生产了第5件衣服 生产了第6件衣服 生产了第7件衣服 """  # 到这里我们找工厂拿了8件衣服,我一共让我的生产函数(也就是produce生成器函数)生产2000000件衣服。 # 剩下的还有很多衣服,我们可以一直拿,也可以放着等想拿的时候再拿
  读取文件 import time   def tail(filename):     f = open(filename)     f.seek(0, 2) #从文件末尾算起     while True:         line = f.readline()  # 读取文件中新的文本行         if not line:             time.sleep(0.1)             continue         yield line  tail_g = tail("tmp") for line in tail_g:     print(line)next() 和 send()
  next()让包含yield的函数(Generator)执行
  next()和send()在一定意义上作用是相似的,区别是send()可以传递值给yield表达式,而next()不能传递特定的值,只能传递None进去。因此,我们可以看做c.next() 和 c.send(None) 作用是一样的。
  第一次调用时,请使用next()语句或是send(None),不能使用send发送一个非None的值,否则会出错的,因为没有yield语句来接收这个值。def x():     print("bai wei")     m = yield 5     print(m)     d = yield 12     print("reach here ")   c = x() next(c)  # 启动generator next(c)  # 给yield表达式传一个None值 和 c.send(None) 等价 """ bai wei None """
  send 传值def x():     print("bai wei")     m = yield 5  # m的值就是send传的 hi     print(m)     d = yield 12     print("reach here ")   c = x() next(c)  # 启动generator c.send("hi") """ bai wei hi """
  第一次调用时 不能使用send传一个非None的值def x():     print("bai wei")     m = yield 5     print(m)     d = yield 12     print("reach here ")   c = x() c.send("hi")  # 报错 """ Traceback (most recent call last):   File "xx.py", line 10, in      c.send("hi") TypeError: can"t send non-None value to a just-started generator """ send(msg) 与 next()的返回值
  send(msg) 和 next()是有返回值的,它们的返回值很特殊,返回的是下一个yield表达式的参数。比如yield 5,则返回 5 def h():     print("Wen Chuan")     m = yield 5 # m的值就是send传过来的 Fighting!     print(m)     d = yield 12     print("We are together!")   c = h()  # 不执行函数 得到一个生成器 m = next(c)  # m 获取了yield 5 的参数值 5 d = c.send("Fighting!")  # d 获取了yield 12 的参数值12 print("We will never forget the date", m, ".", d)  """ Wen Chuan Fighting! We will never forget the date 5 . 12 """

李开复AI自动化先进计算架构等4个领域存在巨大机会新京报贝壳财经讯(记者罗亦丹)10月25日,创新工场董事长兼首席执行官李开复在2021科大讯飞全球1024开发者节上表示,AI自动化先进计算架构新能源技术和生命科学技术四个领域存在宁德时代股价过600元,又创新高,储能业务是个投资新赛道吗?储能业务是不是一个投资新赛道现在还不清楚,但是最少从市场热点炒作角度而言,已经是炒作的越来越凶了。很多人听到这个名词觉得很陌生,其实他就是一个非常容易理解的业务而已,过去有,现在有演绎高端和专业,德国冰豹KONEPROAIR无线职业版使用体验最近想组建一套白色键鼠来提升桌面整体颜值,键盘直接更换键帽,鼠标则是选择了专门对右手握持优化的德国冰豹KONEPROAIR无线职业版。最终效果差不多这样,还不错吧。这款鼠标的采用极13比特币集中在1万人手里,散户只是陪玩?根据美国国家经济研究局数据显示,比特币的前1万名投资者控制了13以上的货币供应,且是比特币游戏中的最大获利者。但如此高的集中度,也使得比特币容易遭受网络攻击。比特币集中于头部玩家自股价大涨!特斯拉市值首破一万亿美元,老板身家飙升至2552亿美元当地时间美股收盘,特斯拉大涨12。66,收报1024。86美元,市值首次突破一万亿美元大关。消息面上,据彭博社,方才脱离破产保护4个月的全球最大的汽车租赁公司之一HertzGlob运动耳机也玩主动降噪,希望这次甩肉计划能坚持到最后真无线耳机的大潮流之下,可能有些小伙伴会觉得颈挂式耳机有些复古。回想起我的第一条颈挂式耳机,自然状态下颈部是闭合的,戴上那项圈,感觉自己离少年闰土就只差一把钢叉了。不过,现在的颈挂简单几步,教你轻松恢复微信聊天记录安卓手机微信删除的聊天记录怎么恢复1将手机连接电脑,并打开微信聊天记录的储存位置。微信聊天记录目录路径为encentMicroMsg一长串字符的文件夹(微信账户)2使用360文件恢西屋与宫和的颈椎按摩器,哪个好?各有好处吧,之前知道西屋与宫和,是因为他们两家生产的按摩椅,体验过还可以,后面在京东也看到了他们的颈椎按摩器,就分别买了一台家里人用。西屋与宫和的颈椎按摩仪都是机械式揉捏的,机械手呆萝卜溃败启示录造血不足烧钱殆尽,生鲜电商应发力供应链日前,生鲜电商平台呆萝卜在几经沉浮后正式宣告停止运营。根据该平台发布的公告,由于安徽菜菜电子商务有限公司(下称菜菜公司,为呆萝卜运营主体)最终没能引入重整投资人,菜菜公司即日起停止把宽带拉山里,大概10公里,怎么解决,求大神指点?从题主的描述来看,要把宽带拉到山里,大概10公里的距离,最靠谱的方案就是铺设光纤线路。由于距离是10公里,使用网线是不行的,因为网线的单段传输距离是100米,使用中继器后最大传输距MacBookPro2021首发体验野兽级性能,宠物级功耗平整的A面,圆润的倒角,甚至还有黑色的键盘。全新MacBookPro的设计乍一看是如此的OldSchool,但实际上,它是真的OldSchool。因为它和这台PowerBookG4
人人都是老中医,左点砭石刮痧仪分享随着人们生活水平的提高,大家对自己的身体保养越来越重视。在众多养生之法中当属中医的刮痧和拔罐最为常见,笔者只接触过刮痧,那滋味不是一般的酸爽!传统的刮痧很讲究手法力度器材,一般人难亚健康人的福音,左点小艾2智能无线艾灸盒现在社会生活工作压力大,很多年轻人或多或少患有些小毛病,比如说我,我是严重的湿热型体质,到了夏季尤为严重,四肢乏力大便次数多容易长痘微胖(吃的不多),已经严重影响到我的工作和生活,女神有了它牙齿更健康,罗曼Smart1电动牙刷牙刷可以说是人人都需要的刚需品,每天早晚刷牙已经成为人们的生活习惯,但是你对牙刷的历史又了解多少呢?随着科技的不断进步,我们在选择牙刷又要注意什么呢?2000多年前,古人就懂得如何OPPOK3和荣耀9X怎么选?大内存也重要7月荣耀9X的出现,再次让国产千元机市场掀起一阵热潮。该机主打真全面屏超长续航,售价1399元起看似具备着较高的性价比。而面对上半年热门机OPPOK3,晚发布的荣耀9X是否更值得入红与黑恒大汽车募集260亿港元1月25日,恒大汽车(0708。HK)股价飙涨,涨幅一度超65。截至收盘时,恒大汽车涨幅49。83,报44。8港元股,市值涨至3998。32亿港元。就在50天前,即去年12月3日,充电桩里面的大生意,全国充电桩总量达168。1万台1月13日,中国电动汽车充电基础设施促进联盟(以下简称充电联盟)发布2020年电动汽车充换电基础设施运行情况,2020年全年,充电基础设施增量为46。2万台,公共充电基础设施增量同挑战不息吉利星瑞颠覆者行动在继续中国家轿的颠覆者,不止于一句口号。对于吉利来说,这个荣耀不属于拥有300万用户基数的帝豪,也不属于其旗舰轿车博瑞,而是基于CMA架构的全新车型星瑞PREFACE。正如其在新车上市时CRV插混版上市本田中国混动升级登顶合资SUV销量王后,CRV迎来插电式混合动力车型2月2日,CRV锐混动e(插混版)正式上市,百公里综合油耗1。3L,较锐混动车型的4。9L实现跨越式提升。CRV锐混动e补贴后指中国最畅销车型出炉,一起来看看都有谁?下下2020最新版的中国畅销车型榜揭晓,一起来看看都有哪些车型上榜?轿车轩逸夺冠随着新平台新车型的加入,轿车细分市场悄然发生变化。轩逸超过朗逸成为年度轿车类销量冠军。其中,轩逸的终名爵领衔,中国汽车在澳洲焕发生机据澳洲联邦汽车工业商会(FCAI)公布的数据,今年1月中国品牌汽车在澳洲的新车销量为4,198辆,较去年同比增长156。在当地排名第四,首次超过超过德系的3078辆和美系的2056威固品牌重塑之年,斩获金触点全球商业创新大奖等两项行业大奖近日,全球特种材料公司伊士曼旗下汽车膜品牌威固(VKOOL),凭借品牌战略重塑的不凡表现,夺得金触点2020全球商业创新大奖整合营销类铜奖。作为亚太地区具有权威性和影响力的商业与营