00:00
再下来这个生成器它是什么东西,先说一句话,叫生成器的本质就是迭代器,它的本质就是迭代器,说白了你写个生成器,那相当于你是自己弄了一个手动写了一个迭代器啊,手动写了个迭代器,那么生成器的话,这个生成器的写法一共呢,就是产生生器,一共有三种办法来生成器的三种生成办法就是三种,呃,创建办法,第一种办法是通过函数,通过生成器函数可以创建一个生成器,第二个是通过表达式,通过生成器表达式啊来干嘛呢?去创建生成器,然后生成器啊,第三个是可以通过数据转换,通过数据转换也可以获取到我们的生成器,那么今天或者咱们在这里我。
01:00
我们主要讲的是这两种,主要讲的是这两种,那么这两种里面首先看第一个生成器函数应该怎么来玩,那么我们看生成器函数,首先记得生成器函数它也是个函数,所以这个鬼东西,这个鬼东西它的写法跟咱普通的函数没什么区别,没什么区别,逻辑也基本上差不多,就是一个词的一个改变,就让他彻底的进行了个改变,看着啊,我来写一个案例,来新建一个X file02生成计函数啊,首先呢,先定义一个比较,呃,简单的一个函数,我们之前所学习的函数def fo啊,我们来打印一下,我是周杰伦,然后呢,昆凌昆凌好了,那么现在。
02:00
哎,我是写了一个函数,接下来我去执行这个函数叫B,这么一执行,执行了之后的结果是什么呢?就是诶,我这块能打印一个周杰伦,然后这个地方会接收到一个昆凌,但是现在我没接,可以吧,对吧?来等你运行一下,看,我看到我是周杰伦,这个能看懂吗?这个好,这个既然能看懂的话,那OK,接下来你注意看,我现在想把这个函数变成生成器函数,非常简单,把return给我换个词,换个U的YL换成这个词,那么它现在就不再是一个普普通通的函数,它现在是一个生成器,看好了这个东西,函数中包含了Y,有I的,那么它表示的是当前这个函数,啊,当前这个函数就不再是普通的函数了,是什么呢?是生成器函数,它是一个生成器函数,那么接下来。
03:00
好,我这块执行方执行右键走,你有没有效果,没有效果对吧,很奇怪,没有效果,那么没有效果的话,看这我如果说把它打印一下,你注意一下,打印一下,讲道理,讲道理,如果这块是来告诉我这块打印的应该是什昆凌对不对,好了,那么我试一下走体瑞的话,这是昆凌,现在我给他换了,换个的完右走体右进走,你看这打印了个这么一坨东西,打印了这么多东西,这东西特特别的,像咱昨天讲的什么functiony function at什么什么地方记得吧,特别像那个东西,那么它现在是个什么东西,叫做erator generator,这是生成器的意思,Generator object生成器对象bank在哪呢?在这这这这这个位置,那什么意思呢?你现在执行这个函数,不再是直接从函数从上往下跑了。现在是。
04:00
你这函数已经是个生成器函数了,你现在执行这个函数只会让你获取到这个所谓的生成器,而不是去执行这个函数,所以现在你去执行fun这句话表示的是获取到啊,不是获取吧,就通过函数fo来创建一个生成器,也就是说你现在在这拿到的是一个生成器,那我现在我打印出来的就是个生成器,那么生成器看它长什么样,就这么一个玩意儿,就这么一个玩意儿,那这玩意儿咋用对吧?生成器的本质我刚才说了,它是啥玩意来着?迭代器,那么迭代器我们拿到一个迭代器之后怎么去用它ne的对不对?我拿到迭代器之后ne就可以了,所以生成器讲道理它应该也是可以next的,所以在这来个G啊,接收一下它,它收到之后让G点杠杠next的,你看是OK的了,对吧,是可以执行next的,那么。
05:00
我们来打印一下这个next,你注意看这个next来有进走,你看长我是周杰伦昆凌,也就是说这一句话看好了啊,这一句话咱刚才试了它有没有成行函数没有,他这句话是干嘛的,拿到拿什么东西,拿到一个生成器对吧?拿到一个生成器,拿到生成器之后,让生成器点next,让生成器往下走一步对不对,往下走一步的时候,它才从这个位置走到哪呢?走到第一个U,走到第一个U,那么这个时候我们的函数才被执行了一次,才被行了一次,那么想想我们之前讲这个所谓的呃,叫什么呢?叫迭next器的时候,我是可以next,然后再next,应该是不是拿下一段东西,对不对,那再next,再拿下一段,对吧?那么我现在是执行了一个next,那它是从头给我拿到这个位置,那么我想接着next应该。
06:00
什么效果接的next应该是报错对不对?来这一点,杠杠next那个错是啥来着,还记得对吧?找你件看报的是不是也是这个错,跟那个迭代器是不是一个玩意,是不是一个玩意,报的错都是一个玩意儿,好了,那么现在看好了,看好了我现在是执行了next,它报错了,那么怎么不让它报错,看好我可以在函数里面干嘛呢?再写一点东西叫啥呢?我是王力宏啊,王力宏媳妇是谁?李云迪谁李云迪李文李李文迪李云李云迪这是谁啊,我不认识不认识高哪个女的男搞事情了,来来来,看这看这儿,我现在第一个G杠杠的,她是从这走到第一个。
07:00
速的返回一个昆凌,那么我在这块打印到的就是那个昆凌,然后我又执行一个next,注意啊,这个next是接着谁执行,是不是接着上一个完事之后再执行的,对不对?那么按照这个迭代器的效果,它只能一条道跑到黑,就是从前往后走,那么也就是说我前面这一段执行完了,我在next是不是执行后面这一段东西对不对?那也就是说我后面这个next的它执行的应该是哪到哪。应该是在哪,是不是王力宏到李云迪这块能听懂啥意思吧,因为你前面这的时候是已经跑过了,通过斯时跑过了,对不对?所以这个时候我们走右键run就发现,诶下面这一段也可以跑了,也可以跑了,那么也就是说这个next看好了,这个next跑的是关于周杰伦那块的东西,而下面这个跑的是王力宏这块的东西,能看懂吧,是这么回事,那么接下来这个柚子跟瑞盾的区别是不是就出来了,是不是就出来了,那么想想,如果这换成寸,兄弟们这换成寸这块给我换成寸来,我这换瑞,我一执行放是不是从上往下走,走到昆凌处就完了,不对,下面王力宏能执行吗?永远都执行不到,对不对?所以这个Y跟return的一个区别就出来了,Return是什么效果,直接直接函数return是直接干嘛?发展回值是吧,直接返回。
08:34
结果对吧,然后呢,结束函数的调用,然后下面这个I的啊,YLD,它什么意思什么意思,也是返回结果对吧,也是返回,但是整个函数会停啊,不行,只要你next的是不是接着往下走啊,对不对,所以它可以让函数分段执行,让一个函数函数分段执行,那OK,往下再看,往下再看啊,我把它收一下,往上来再来,我们再接着往下走,再来一个我是。
09:12
笛卡尔来右的啊,右的一个啊,卡尔基是谁啊,来就这么一句话,看着我现在这个这样执行到这儿了,那么接下来我再去跑的时候,现在能拿到的是不是还是王力宏的东西,能不拿到笛卡耳机拿不到吧,那尼现在是拿不到迪卡耳机的,怎么拿到迪卡耳机继续去,对吧,滚蛋再继续去,所以我们可以在这啊,在这接着去打印G点,杠杠next,再往下给我走一次,那这个是什么呢?下一个下一个是笛卡尔基,所以这个时候你应该明白U的啊,U的这个东西它是分段的,把一个函数从这走到这,然后下一次再next,就从这儿往下再走,然后从这往下再走,就好比说咱们点名我第一次执行从大洋哥开始跑,跑到这儿跑到这,下一次在next克斯的时候,就从这块接着。
10:12
还要走,走到这儿,下次再走的时候从这走到哪啊,这根据你的右的到底定义在哪,那么就走到哪啊,它就走到哪,OK,那么我们来再去运行一下它结果啊迪卡耳机出来了,然后我再往下print,这点杠杠ne的,这个时候什么效果说什么效果说没有了对不对?来那既然没有了,看这我可不可以这么玩啊,你好啊。Great,你好啊,看我在最后一个U的后面写了个你好啊,那么也就是说你最后一个的返回之后,那么从这一块我是不是可以接着next接着往下走,是不是接着往下走,但是走到哪儿没有有头吗?没头,因为它是标准是卡在哪呢?是卡在右子,就从当前的右子走到下一个右的,明白啥意思吧,那么现在我走到最后一个笛卡耳机了,往后再走,你好啊,之后就没了,并且没了之后你这块也没有U的,它没有头,所以他依然会给你报错。
11:17
看到他依然会给你报错stop和,但是这你好华有没有有,也就是说从上一个的往下再走的时候,他真的执行了,执行完之后没了,没了函数,整个函数都都完事了,往上走又没看到you的,他没法返回,直接给你报了一个stop这么一个错误,也就是说在你真的去写这种生成器的时候,写这种生成器的函数的时候,最后一个U的后面的东西。能不能执行呢?能,但是有没有用,没有,你后面这个如果想执行的话,一定会干嘛呢?会报错,一定会报错,所以在最后一个you的之后,一般情况下我们是不往里面去写代码的,不往里面写代码的,因为你它执行从这执行到这个I下面执行从这再找下一个you,你没有下一个I,它就报错了,它就报错了,所以最后一个I之后,尽量不要去写程序,听完最后一个I的之后,如果再进行杠杠next,那么它会干嘛呢?会错啊,会报错,OK,那么这个就是我们的第一个知识点,叫生成器函数,生成器函数就是把return换成谁也有的啊,也有的这个词啊,怎么讲呢,我总记混听啊,我总记错,叫YL,我总把它拼成Y。
12:48
对吧,回去,反正你们自个儿看怎么拼合适,给你们留个坑,留个坑,OK,接下来把这个去写一写,去写一写,好好理解理解这个右的一层又一层啊。
我来说两句