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

测开之数据类型第4篇迭代器生成器

  文章总览图
  目录一、迭代器 1.迭代协议 2.什么是迭代器呢? 3.可迭代对象 4.这个是可迭代对象和迭代器的区别 二、生成器 1.什么是迭代操作? 2.生成器和迭代器有什么不同呢? 3.生成器比迭代器多了 3 种方法 4.为什么生成器有的方法,迭代器没有? 5.数据发送到生成器,在哪个地方呢? 三、系列推荐 一、迭代器1.迭代协议
  一种是包含iter方法的,另一种是包含getitem方法的(比如str对象就没有iter方法,但是一样能够迭代),只要对象中包含了这两种方法的任意一种,那么这个对象就可以进行迭代操作,也就是实现了迭代协议。 2.什么是迭代器呢?
  生成器是迭代器的一种。迭代器的范围比生成器更广。只要可以通过next(),从里面一个一个往外面取值,都被称为迭代器。
  关于要创建一个迭代器对象,那么内部要实现一个迭代器的协议。 2.1 迭代器协议实现了迭代器协议的对象(实现方式:对象内部定义了一个iter()方法)。 对象实现了__next__方法。 __next__ 方法返回了某个数值(当然一般情况下,我们需要的是返回这个对象的特定的数字,并且按照一定的顺序进行依次返回)。__next__方法需要在值取完的时候,抛出stopiteration的错误信息。 3.可迭代对象
  有个东西需要区分,一个是迭代器,一个是可迭代对象。
  只要内部实现了迭代协议的就是一个可迭代对象(可迭代对象可以进行相关的迭代操作,比如for循环,map函数等)。
  可以用 for 循环进行遍历的,那么都是可迭代对象。可迭代对象不一定是迭代器,迭代器是在可迭代基础上,它内部要首先定义一个__next_方法。
  迭代器内部实现了一个__next_方法,实现了这个方法之后,通过__next_这个函数才可以对这个迭代器进行一个取值。
  还有个iter()方法,这个方法可将可迭代对象转换成一个迭代器。
  yield和return是 2 个东西。yield只是暂停那个生成器函数。yield可以从生成器里面生成一个内容。
  列表可以进行 for 循环,可以进行 for 循环遍历,它就是个可迭代对象。  列表是可以通过 for 循环遍历的,但是它不是迭代器。
  迭代器是可以通过next()进行取值的。
  生成器也是迭代器,生成器是可以通过next()去取值。那么,生成器它是迭代器的一种,是属于迭代器的。
  你看,报错了: # 列表 # 可迭代对象:可以 for 循环遍历的都是可迭代对象 li = [1,2,3,4] next(li) print(next(li))
  提示:列表它不是一个迭代器。
  不是个迭代器,不能通过这个去取值。 要把一个可迭代对象转换成一个迭代器的话,通过iter()这个函数把可迭代对象放进去,它能够返回一个迭代器。
  你看,这样就能获取到了: # 列表 # 可迭代对象:可以 for 循环遍历的都是可迭代对象 li = [1,2,3,4] li1 = iter(li) print(next(li1)) print(next(li1))
  通过iter()这个函数,来处理某个对象,它实际上相当于触发这个对象内部的一个__iter__这个方法。
  咱们看看list()的源码:
  通过iter()这个函数把对象li传进去的时候,它会触发li这个对象对应的__iter_这个方法。
  如果通过next()去取值,把li1这个对象传进去的时候,实际上是触发这个对象的__next__方法。
  它的类里面只有这个__iter__方法。
  迭代器可以通过__next__取值。迭代器内部实现了__next__方法。
  迭代器内部实现了 __iter__方法之外,还实现了__next__ 方法。 4.这个是可迭代对象和迭代器的区别
  二、生成器
  生成器是迭代器的一种。
  迭代器是在可迭代对象的基础上实现了__iter_方法。迭代器和生成器都可以支持迭代操作。 1.什么是迭代操作?
  for 循环。 2.生成器和迭代器有什么不同呢?
  生成器是迭代器的一种。  刚才用起来的时候好像没有什么区别,打印下这个类型看看。
  可以看到,它返回的是个列表迭代器对象:
  这个是生成器对象:
  li1 = iter(li)这个是可迭代对象。然后通过iter()转换成一个迭代器。 3.生成器比迭代器多了 3 种方法
  send()方法
  发送数据
  close() 方法
  关闭生成器
  throw() 方法
  使用的 throw 指令抛出错误
  生成器是有send这个方法的,迭代器是没有的。
  例如,前面有个生成器叫做tu: # () 生成器表达式 tu = (i for i in range(1000))#生成器对象 print(tu)
  tu可以调用send()这个方法,可以与生成器进行交互,可将数据传输到生成器里面。 4.为什么生成器有的方法,迭代器没有?
  举个栗子:
  生成器是迭代器的一种。
  例如定义了一个父类,再有个子类,父类创建出一个对象,子类创建出一个对象。子类有自己的方法。 父类创建的出来的对象里面,肯定没有子类对象里面的方法。  子类里面有的方法,父类里面没有。
  迭代器就是"父类"。生成器就是"子类"。 def gen():     for i  in range(1,5):         yield i  gen()
  生成器运行的时候,调用函数gen(),调用这个函数的时候,这个函数里面的代码不会直接运行。
  代码修改成这样: def gen():     for i  in range(1,5):         yield i  g = gen() print(g)
  只有通过next()方法往生成器里面取值的时候,它才会从代码上面往下面运行。
  这个send()方法可将数据传到生成器里面。使用next(),从生成器里面获取出一个值。如果使用send()方法,它也能够获取出来一条数据。 def gen():     for i  in range(1,5):         se = yield i         print(se)  g = gen() print(next(g)) print(g.send(100))
  send()方法可以往生成器里面传入一个值。
  通过send()方法生成数据的时候,它也可以往里面发送一个 100 的值。 5.数据发送到生成器,在哪个地方呢?
  如果通过next()去取值的话,这个yield完毕后是没有返回内容的。
  代码详解:
  第一轮:  循环进来,通过next()去取值生成了一个 1: def gen():     for i  in range(1,5):         se = yield i         print(se)  g = gen() print(next(g))
  第二轮:  通过print(g.send(100))去发送值,然后打印: def gen():     for i  in range(1,5):         se = yield i         print("se 的值:",se)  g = gen() print(next(g)) print(g.send(100))
  在第一轮结束之后,在yield这里,yield完毕就停止了。在第一轮yield完之后,第二轮通过send()传值进去,传到se那里,打印出来 100。
  然后再往上返回一个数据,又暂停,返回第二条数据就是个 2。
  第三轮:  通过next()再去生成一条元素,又触发了yield i这个地方,这里释放了,往后面走,往后面走的话,但是没有放数据进来,这个时候se是空的,打印出来的se是空的。
  然后再往上,生成一条元素到 3,然后又停在yield i这个地方了,生成完元素,把这个值返回出去。 def gen():     for i  in range(1,5):         se = yield i         print("se 的值:",se)  g = gen() print(next(g)) print(g.send(100)) print(next(g))
  再次next()或者send()来触发它的时候,它会这样走:
  注意:  yield接收不是存在i中,这个yield返回出来的i是遍历出来的内容。
  send()发进去的,是yield i这里运行完毕之后,当下一个send()触发的时候,它把这个值发送到yield i这里运行完毕之后的一个结果。
  yield i这里把这个i返回出去,就停在这里不动了。send()发送个数据进去,那么数据就发送到个yield i这地方。
  相当于yield i这个地方返回的一个结果,也就是send()发进去的内容,如果send()不发进去内容,返回出来是个空的。
  温馨提示: 生成器<迭代器<可迭代对象

首次体验超级混动,有点小惊喜也知道是是自己开始开byd了,好像知道从什么时候,小迪逐渐走进了我生活,身边朋友也开始关注比亚迪了,相约小伙伴起来体验Ssss店是第来了,但是唐倒是没有开过,这次跟小伙伴起来开这屏汉ev5g丹拿版今天销售通知我有展车了,然后让我去看一下了,感受一下丹拿音响的音质,于是大早上就怀着无比激动去4s店了,外观对比之前还是没有差别,这算是一个小换代还是增配,感觉跟自己选了一套丹拿音汉ev太香了,忘记油车了21年才拿到驾照,对油车无感,喜欢新能源的安静又舒适,市内开车,老家湘潭到长沙比较近,不担心续航问题。所以看中电车。稍微了解一下之后果断选择了汉,汉这个车标戳中了我的内心。比亚迪又windows7ultimate中注册表清理的操作方法很多深度技术的小伙伴都知道,我们在win7旗舰版电脑中有安装软件,就一定会在注册表中留下该软件的相关信息,如果卸载了该软件也会在注册表中残留有数据,当这些数据越来越多,那我们的电脑Windows7Professional开机画面的修改方法有不少深度技术朋友都不喜欢Windows7Professional的开机画面,感觉单一太无聊了,想要换成自己喜欢的画面图片,那么win7系统中电脑开机画面怎么换呢?相信很多朋友还都win7纯净版如何删除开机启动项的操作方法有很多深度技术用户都还在使用win7系统的,有一些深度用户在使用win7纯净版的时候,发现电脑开机比以前慢很多,也清理了垃圾和系统缓存还是感觉慢。其实,可能是电脑开机启动项变多了导windows10小娜cortana搜索无结果的解决方法大部分深度技术用户都可能使用过微软小娜了吧,小娜也叫cortana,它是Win10系统中的一款强大功能,有了它,我们对电脑的操作将更加方便快捷。但有使用win10正式版系统的小伙伴审美崩坏,OnLeaks发布2019年iPhone早期渲染图今天推特爆料达人OnLeaks总结了一年的爆料成绩,在曝光的34项设备中有23项完全准确,一项75准确,10项待定。从数据来看,他基本可以被视为爆料界的MVP了。不过最近他放出了2B站2018年度弹幕排名真实获得年度最佳哔哩哔哩联合中国社会科学院共同发布2018年度弹幕,真实排名第一,前方高能第二,颜表立排在第三。排行依据2018年弹幕发送数量进行排序。在2018年,B站用户共发送了超过10亿条弹国庆从杭州坐地铁到绍兴玩什么?这几个地方不可不去什么是绍兴?说及浙江的古镇,大概都会想到乌镇西塘等地,而绍兴仿佛是一个被人们遗忘的地方,与古镇比起来,它更羞涩,更委婉,更有文人气息。谈及历史悠久文化底蕴这些,绍兴从来没输过,绍兴西安地铁,你真的让人对千年帝都刮目相看明明是耍流氓,装什么保安!2021年8月30日西安发生了一起震惊人眼球的事,相信大家都有所耳闻。有网友说不相信这是真的。大庭广众之下把人扒光,是捉小三么?一个思维正常的人,哪怕稍微
浅谈德国汽车工业为何如此强大?德国汽车工业发达,主要是其基础工业都很发达,而不存在短板之处实际上世界上这些能造好汽车的国家,如美国日本德国等等无一不是基础工业强大,基础工业可以简单理解成综合工业体系,如冶炼锻造日产衰退的背后,究竟隐藏了哪些不为人知的故事?如今的日产汽车,虽然还能保持着极高的销量,但这超高的销量背后,所隐藏的则是大幅度的优惠力度同级别进行比较,虽然日产的产品在销量上对比两田,依然不落下风,但产品力的差异却在与两田不断浅谈众多自主车企为何豪赌双离合变速箱?给乘用车配备双离合变速箱已经成为很多车企的做法,似乎双离合变速箱有逐渐成为未来趋势的感觉,但不能否认的是现如今的双离合变速器还有许多需要完善的地方对于很多主机厂而言,走上双离合变速强悍指数Max,卡西欧PRW7PR户外手表,可靠和专业的标杆作为一枚户外旅行博主,居家死宅的日子简直要人命,因为一直以来,只有高山河流沙漠草原,还有星辰大海,才是我的征途。这些年,我也来来回回跑过一百多个国家,年前,还在北极住了半个月,在北没钱又想要好画质?顶级画质白菜价,传说中的雷鸟终归来缘起电视圈一直没有手机圈火爆,毕竟电视的更新换代的时间太长太长,且现如今,电视开机率早已远远的被手机甩开。但随着小米华为的强势杀入,电视圈的话题度还不时保持着小热度。在全球电视市场滕Gallery因为硬盘爆红,桌面迎来重新改造主力电脑戴尔XPS15里面是一个M2硬盘还有一个Sata接口的硬盘,分别安装黑苹果系统以及Windows系统,至于储存数据是使用两块西数MyPassport2T的移动硬盘来存储数据滕Gallery为什么现在我还需要一个播放器手机逐步的更新,从原来的小灵通功能机半智能机到现在的智能机,手机的功能越来越多拍照看视频玩游戏听音乐聊天等等。很大程度上出门只需要带一个手机就好了。之前出现过的很多电子设备PSPM锅具新品牌喜时首次开启拼多多百补直播现场爆炒钢钉不惧留痕这是一盆钢钉。话音刚落,哗啦,上海名厨蒋颐将它们倒入一口喜时炒锅内,接着就是一番大力翻炒颠勺。几分钟后,他移走钢钉,用纸巾擦拭炒锅内部,不加油,放入少许面糊。很快,面糊渐干。蒋颐轻如何突破职场内卷?装备很重要!科大讯飞智能办公本X2测评转眼之间毕业已经近十年了,我也从一个懵懂无知的毕业生变成了一个职场中坚力量,每天都要和来自全国各地的客户开会沟通。十年工作下来,最让我感触的就是办公设备的进步。刚开始的时候,我们只家庭园艺市场火热复合肥龙头史丹利借势拼多多培育新品牌春节宅家做什么?没事转转小菜园,心情格外好。在拼多多园艺类目的产品评论区,不少近期新增的评论表达了类似的兴趣。这并不奇怪。据统计,去年,拼多多园艺类目销售额及订单数同比增长超过15天猫精灵县城刮起智能风,小城80后最爱买智能按摩仪1月19日,天猫天猫精灵IoT及家装设计平台躺平设计家,联合发布了2020下沉市场智能家居消费洞察,指出三线以下的中国家庭正在加速智能进化,下沉市场已超越一二线成为主力消费市场。天