00:00
来总结一下这三个玩意儿,第一个就sort干嘛用的排序排序排序的话里面默认你至少给一个list对吧?那么reversed这是什么意思?是否要进行一个倒叙对吧?是否倒叙?然后下面这个key是干嘛的?K是干嘛的排序规则,排序函数,你要用什么函数进行排序,对吧?拿什么来排序,对什么规则进行排序,这是sort啊,它用来排序的filter干嘛的筛选啊,用来筛选,筛选的话,第一个参数要的是什么?第个参数数,第一个参数要求你给他一个函数,你要用什么函数进行筛选,你要筛选出来什么样的数据是你想要的,第二个参数给的什么?对代对象啊对象好了,Ma里面map里面map作用是干嘛的,作用到没对数据进行一个处理,对数据进行一个处理,那么它的处理听好了,它的处理方式,它的处理方式就是大数据的ma思想,就是把这个大量数据分批分批的往下去发,分批分批的往下去发啊好了,这个地方就说到这啊,这就说到这,说到这之后,我们来看一下今天的下一个内容。
01:17
下一个内容该是地归啊地归,地归这玩意啊,很多人把它说的神乎其神,神的不行了,对吧,得玄乎,我告诉地归是啥?地归就是自己吊自己,就是自己吊自己啊,没有什么所谓的特殊性,看着啊,来这我们写一个递归啊零六叫啥呢?递归啊递归来在这定义个函数,我说啊,一会儿你跟不上了,同呢答印一下我是谁啊,我在哪里是吧,我在哪里,然后呢,在函数里面调用它自身,在函数里面调用它自身,那么看好了这句话在这到底合法不合法,你琢不懂,合法不合法,指指定是不合法,为什么不合法啊,来看这我在这调用fun,看着我在这调用fun,首先你看它执行流程啊,首最开始程序定义个。
02:17
函数对吧?那函数里面东西现在不会执行,然后第二步,当你调用fun的时候,它真的走到这开始去执行,那么想想在这个位置去访问fun的时候,Fun是不是已经有了,是不是有了,那么怎么办呢?就接着去访问呗,说白了从这干嘛呢?你再给我上去,接着去访问fun,然后在干嘛呢?打印我是谁,我在哪里,然后在干嘛,是不是又在犯去了,然后是不是又上去了,那这是什么效果局限循环对吧?死循环,就说白了,我就相当于是那个像贪吃蛇一样,贪蛇一样贪吃蛇吃一个豆长吃了多长,然后最后干嘛呢?回来又咬着自己的尾巴干嘛呢?自己的头吃自己的尾,转来转去的,没懂啥意思吧,自己头刺吃自己的尾,这样在这转啊在这转,你不停的吃啊,那个尾一直往后收,对不对,不停的头吃尾就是这个道理啊,就这玩意儿来看着抛起什么效果呢,使用完,但是底下它会报错,它会报错,他说max什么什么deep什么玩意,当你在。
03:17
在执行的时候,它是有一个什么呢?最大的一个递归深度,最大的递归深度,为什么要递归深度,听好,如果没有这个递归深度的话,没有这定位深度的话,你仔细看啊,兄弟们,我在这准备一个A等于十,看着啊,我在这准备个A等于十,那么这个A等于十什么时候才会起作用?度,我调函数的时候,是不是产生A等于十对不对?那么想想,如果没有递规深度的话,我上来放一直行,这波给我产生了十,是这样的吧,那么现在看好了,这是我本次调用我这个放函数,那么这个内存里边是不是应该有一个放的一个局部空间,是这样的吧,然后接着我又往下又跑了一遍半,然后是不是又掉了一次半,Ug又掉了半,是不又产生一个一个内个空间来,这俩内置空间里面是不是都有一个十,是不是有个十,这有个十,这有个十,然后再往下掉又来个十,再往下掉又来个十,如果说你没有限制的话,往死里面去调用,最终你内存是不是就爆了,数据爆了,不管你多大,内存是不是最终肯定会爆,对不对,这个比那个无限循环可可怕的多,比那个无限循环可可怕的多,因为无限循环看着无限循环是这么玩的,WELL1然后呢,里面A等于十,然后呢,我们去打印什么,准备哪一句话吧,打印。
04:41
的,哈哈,看好了,它跟无限循环是两码事,无限循环倍来1A,然后呢,打一哈哈,下一次再循环回来的时候,这可不是产生新变量A啊,是原来那变量A重新等于十,能明白啥意思吧,就说白了用的是同一个变量,而上面这个由于你每次调用函数都会产生一个什么呢?内部的一个新空间,新空间里边产生一个十,下次再调用又来新空间,又来一个十,所以这种访问如果没有限制,你的内存一定会爆,一定会爆,没有不会说你的内存怎么怎么着怎么着,一定会爆,他一定会爆的,所以所以它的Python内部,它给你的什么机制呢?有一个最大的递归深度,说白了它给你控制一下,你别一直去掉,掉完了之后内存容易爆,对吧,内存容易爆,那么它定义的这个深度是多少呢?完这个没法数是吧,这个没法数,那么我们定义个东西来数一。
05:41
下好了定语动来数看着啊,在这最开始的时候是第一次来一个,然后呢,Count,等会儿我们去打印吧,打印的时候给他加一个str,来一个count,那最开始这样我传个一,一打印的应该是我,我在我是谁,我在哪里,然后来个一对吧,然后下次再掉的时候,我让count加个一,我让count加个一,那这时候看好了,第一次进来是一,Countt等于一,打印一,然后呢,再掉的时候往里边传几了,传二了,Count等于几了,等于二,以此类推,对吧?以此类推好了,运行一下,走诶,我得把它干掉啊,来走你啊死机死不了,来往上拉。
06:30
看着马上最上面往最上面从一开始数的能看到我吧,下一次调用,由于你这块传的参数是count的加一传的是二,再下次传的是三,再下面传的是四,以此类推,最终最终往上走走走走找到报错那位置右啊右边吧,走右边吧是吧,呵呵呵,哎,这呢999997啊997这个也很神奇,这个好多所谓的博客里面,包括他们说都是深度是998,但是对不起,我这边在我的电脑上,苹果机器上测是997,在这测也是997,所以我们能用的深度是多少呢?997,能用的就997,那么看好了九九看好了啊,第998就挂了是吧,就挂了,那你看好了,为什么它要设置这么一个深度,第一是怕你内存爆了,第二,如果你的递归已经往里面探了多少层呢?探了已经。
07:30
这990 97层甚至1000层了,还没到头,还没递归完,要么是你的程序有问题知道吧,要么就是你的这个处理可能真的不太适合用地归,能明白啥意思吧,可能不太适合用地归,比方说你去写这种死循环,我就咔咔这么写,写这死循环,这种情况就不适合用地归死死循环最好的是用谁哪个没有一是他吧,对不对,写死循环小叉他不比那地归容易多了嘛,对不对,所以这个就是递归,记着递归有一个深度,那么递归深度的话默认是多少呢?听好在Python的官网里面解释是Python的递归深度最大是1000,最大是1000,但是永远到不了1000,到不了1000就是它的官众文档上默认值是1000,但是到不了1000他会给你报错,都给你停下来,那么我们现在测的能看到的是997啊十九七,但是文档上写的是1000是1000,然后看好了,我们可。
08:30
可以干嘛呢?Import iportt import,然后呢,这是啥意思呢?叫system操作系统啊,操作系统系统,那么在系统里面s.set这个东西,通过这个函数可以去改变地规的深度,改变地规的深度,比方说我觉得我的机器应该还不错是吧,1万啊,来个一半试一下啊,试一下挑战一下啊,来右键走,你3221,然后就停了,看见了吧,也就是说你这块给它设置这个最大的递归深度的话,他不一定真的能跑得到,能听懂啥意思吧,他不一定真的能跑得到,所以这个递归深度听好了可以干嘛呢?调整递归深度,但是不一定能跑到这里,这也是为什么它官网里面。
09:30
指的是1000,但是你跑不到1000的原因,能听懂吧,它官往里面告诉你的就是1000,那么这个时候看好了,我们说这个东西自己掉自己就是所谓的地归,那么地归在什么地方能用到,在什么地儿能用到,看好了递归最大的用处就是去便利形结构,它最大的作用就是便利树形结构,什么是树呢?看啥计算机不是不是这个树树形,树形结构,大树结构哥大树大树什么样的,底下树根,树根之后上叉叉叉叉是这样的吧,对吧,在计算机数据结构里面,把这个咱们见到的树根在底下,叶子在上面,这种结构翻过来,翻过来就是我们计算机结构的树,也有树根,也有叶子啊,来给你们画一下啊,什么叫树形结构,看这。
10:30
比方说一个非常啊,非常典型的一种东西叫做二叉树,好啊,你要叉早熟悉这种东西啊,看着咱们的树根正常的,咱们见到树根是在底下的,对不对?在计算机里面树根在哪呢?在上面啊一个它一个节点啊,一个节点,这就是树根,树根之后呢,树根上面要长啥呢?树要找啥呢?树枝,树枝是吧,要有树枝啊,树枝上有啥呢?又有叶子对吧?有叶子来叶子上面,叶子上面是不是还可以再往上伸啊,就是你的树枝上面这长一个树叶,是不是还可以再往上长,对不对,所以在叶子节点上面可以继续往下去延伸,继续续延伸来,这看叶脉它可以行呐,你怎么想都行,反正这个东西我就告诉你,它二叉树啊,这个东西它就二叉树来往下往下走画圈没地儿画了,没地画,对这东西就二叉树,我现在画这个叫完全二叉树。
11:30
要完全二叉树,那么二叉树听好了,你们未来会学这东西字叫做叫做的东西,叫做堆,堆啊堆,你看这个东西不像堆吗?一堆像个山包一样,对吧,像个山包一样,这东西如果把它处理好了,完全二大树就叫做堆啊,叫做堆,堆分大根堆,小根堆,那后面你们有机会就学一没机会算了,看着树形结构怎么去便利它,它里面放啊,我画圈的地方是干嘛的,是放数据的,比方说放个36啊27啊五,我就随便写了。
12:07
来吧,就用你了,再结一下。早懂早早利索啊来六八十啊七随便写点数据啊,随便写点数据好了,写完了之后,这样的数据结构怎么进行遍历,看好了怎么遍历?首先我能拿到什么呢?一个投指针,我能拿到这个东西,投指针这个整个树的树根,整个树的树根树这个树分成什么呢?分成左子树和右子树,什么叫左子树,右子树呢?用眼睛看左边这一堆叫啥呢?叫左子树,右边这一个叶旁呢,叫右子数,懂吧,说左右啊,左右,左子数右子数,然后左子数右子数,看好了我通过根能够找到两个节点,分别是他的左孩子和右孩子,分别是他的左孩子和右孩子,然后兄弟们你看你看他的左孩子,如果我只把这块东西框起来的话,这个27,如果我把它当成根的话,是不是又是一个左子数右子数,是不是这样结构对不对?那么想想现在给你一个函数能干嘛呢?能拿到一个。
13:16
节点的左孩子跟右孩子看好了,这函数能拿到左孩子和右孩子,那么接下来看好了,我想遍历这棵树非常简单,我只要把它的根节点往里面一传,这时候是不是能拿到左孩子跟右孩子对不对?然后我把左孩子和右孩子右当成根节点,是不是还可以再传这函数里边去对不对,是不是函数自己是不是掉他自己对不对?所以这个时候我把它左孩子跟右孩子再当成根节点传进去的时候,那么这个时候我又拿到了什么呢?六跟八拿到了,十跟七这样数据都拿到了,这就是数的便历,这个就是数的便历啊,那么这种便历叫啥呢?叫广度,叫广度便历啊,后面你们会学是深度吗?我记得是广度了。
14:01
深度就是从里面往上来,他说取值范围不是有个顺序吗?哪个球范围是付钱多付,不不不不不,我没考虑那种东西啊,没考虑那种东西,我不管里边什么东西,我就随便来棵树,我随便来棵树,那棵树肯定分左孩子右孩子,对不对?那么左孩子的话,我又可以把左边右当成棵树,是不是接着传进去对不对,说白了,我现在看好了,我先把这个拿过来啊。好看好了,我现在假设兄弟们,你们看好。我在这定一个函数啊叫fun,然后这个函数里面接啥呢?接这个节点,看我看我别看他,他没我好看啊,来看着,现在我是往里面传个什么呀,传个根节点,拿到根节点之后,我肯定能想办法,你甭管什么办法,反正我拿它的左孩子跟右孩子连着的,知道吧,有叶脉连着的,连着的话我就会有左孩子等于根节点点什么什么left no,就这种这种操作啊,这种操作尾代码,尾代码,然后往下是什么呢?右孩子等于根节点点right node,拿它的右孩子啊等会啊右孩子,那么现在我们说左孩子跟右孩子是不是相同的,还可以进行当成根进接着来是接着来,那怎么来继怎么写,我是不是可以左孩子当成跟进的传进去,那怎么传,是不是放过,然后什么呢,写个什么。
15:36
写个左孩子,然后再放来一个右孩子,能看懂吧,那了,这就是数的便利的伪代码,尾代码跑不了的跑不了,因为咱们没有数据结构啊,没数据结构好了,这个你看是不是自己要自己,是不是自己要自己,说白了,你把那东西用咱们根进改发进去能听懂吗?这个能听懂好了,这是我们见不到的树形结构,接下来我给你们看一个你们能见得到的树形结构看点啊,仔细看,仔细看,看这啊,就这,就这,这是一个什么呢?文件夹,文件夹来,文件夹打开之后注意看啊,打开之后这些又是什么东西?点文件节点,是不是文件夹,是文件夹来,看好了,我把这坨东西给你画成图来,你注意观察一下,把它画成图,最上面是谁?是这个根据点叫Python word spacece,对不对,是这个文件夹吧,来这文件夹打开之后会有什么呢?一个两个三个四个。
16:36
这个是不是一堆啊,一堆什么呢?一堆什么东西,是不是跟他长得一样东西是是这玩意儿,是不是这玩意长得一样东西是什么,是不是也是文件夹,是不是也是文件夹来这文件夹如果再打开长什么样子,再打开有可能是文件夹,有可能是文件吧,对不对,所以再打开的话往上走走走走,比方说这块是啥呢?文件夹,然后呢,这成文件文文件,然后下面是啥呢?这个再打开来,你仔细看这个是不是树形结构,是不是树形结构根在上面,底下咔一个延伸,打开之后咔又一个延伸,是不树形结构是吧,对吧?所以我们操作系统里面的文件夹系统就是一个树形结构,并且这不是二叉树,这不是二叉树,这是一个什么呢?怎么说说叉数,哎,你们这个八名创造可以的啊,可以的,它不叫多差数,它就叫做数,普通的数就普通的数啊,然后听好了,咱现在这是几个数,这是几个。
17:36
啊,这是一棵树对不对?来看到我从地盘下往下往下分,地盘下面咔一堆文件夹,然后文件夹底面又是文件夹,这地盘是一棵树啊,然后E盘是不是又是一棵树,然后F盘树又是一棵树,来这些树画在一起叫啥呢?叫森林,叫森林知道吧,就计算机术语叫森林,多棵树酿,咱正常多棵树放一起可以叫林子吧,对吧,小树林也好,大树林也好,森林也好,对不对?那么在计算机里面多棵树放一起,放一起,咱整个计算机硬盘就是一个森林,就是一个森林,只不过咱们一般的咱的森林比较小,这四棵树啊,C盘,D盘,E盘L盘够了是吧?C盘是四棵树,但是每棵树往上延伸的东西会非常的多,你明白吧,非常多,你有多少文件夹,有多少文件都算是这棵树上的一个叶子节点啊,一个叶子节点。好了,接下来我们就要写个什么呢?叫做文件夹的遍历。
18:36
文件夹的遍历啊,数的遍历来了啊,看这怎么写呢?首先我先准备一个文件,明捷起来,迷糊迷糊,一片大森林,怎么能迷糊呢?来,看着,我先准备一个文件夹,等着你去便历看好了,我先准备一个文件夹,比方说啊,来the pass fair pass啊,The pass吧,啊,别了,要fair pass啊,Fair pass,来个文件路径啊,来个文件路径,比方说我现在看我这地方挺爽的,我看我这挺爽的,我想别理他,那我直接写上地盘下的是S,下的是tson,然后下划线,Work spacece ACE看好了,我准备好我的文件夹,我准备好我的文件夹,那么接下来我想拿到这文件夹里。
19:36
里面的东西对吧?我想拿到文件夹里面东西,说白了,我想把根辑点打开,看看它第一层是什么,你看看它第一层是什么,看好了啊,第一层怎们看,我需要引入portt,引入一个OS,引入一个OSSOS用过了吧,OS干嘛的,咱们用过的三文件,还有重命名,记住吧,是干这俩事的,那么这里边可以干嘛呢?看好了,我用OS看好点干嘛呢?叫做叫做叫做DR list DR list列表DR呢,什么意思?D看里面东西对不对,那合到一起干嘛呢?帮你把这个文件路径下的文件夹都给你打开,把这文件夹给打开,看里面有些什么东西,看里边有些什么东西,那么看好了,我把这文件的fair pass扔进去,看它返回什么啊,Fair pass打开这个是干嘛呢?来查看。
20:36
啊,文件夹中的文件啊,查看文件夹中的文件,那么想想我这个文件夹一打出来多少东西,是不是一堆啊,能能确定几个吗?确定不了对吧?那么告诉你它返回的东西,你甭管是啥,我们先叫它是it啊,先叫它it等于它,然后呢,我们把这东西干嘛呢?判断一下,看它是不是这个玩意儿叫做I对不对,看看它是不是这玩意对,讨厌了,讨厌。
21:17
走你是是个啥可迭代的对吧,然后呢,再来这应该能猜到了吧,能猜到了吧,它是什么东西,应该是应该是代器对吧,来看一下走你出来的不是不是不是看到行,他既然说有没有ne,因为没有没它是个什么东西可代可迭代对象来它既然是个可迭代的,我可不可以的in it可不可以可以可以吧,可迭代东西都可以这么玩好了,既然可以,那这时候我去打印一下EL,大家看一下它是什么东西啊,注意看走你。看好,打开idea idea甭管这里面咱们看不见,但是它里面有的D2 D3d4一直往下,D是包括S14是不是这堆文件夹是吧?是这堆文件了,好了,现在你注意看,我拿到这堆文件夹之后,来我接下来任务想想我是不是可以做个判断,看长如果你的这个EL,它如果是文件,我还能再往里面打开吗?它是文件能打开吗?文件可不行,看着啊,它如果打开是这种东西能打开吗?不能再打开,没东西,因为它里面直接装数据了,对不对,所以我得判断,如果它是文件夹,我是不是可以接到往里的对不对,好的,那么接下来看啊,我接下来判断它怎么判断它是不是文件夹,用os.pass点什么呢?DR is判断是不是是不是什么呢?Dill是不是文件夹,把这个文件给它塞进去,把这个文件给它塞进去,判断一下它是否是文。
23:00
来看这儿。这啊,这什么哪儿吗。来看这,我现在拿到这EL是什么,那个文件文件对不对,文件名对不对?好了,那这个文件我得知道它是文件夹还是文件,如果看好了,我在这写个什么呢?写个哈哈点PY,我写个哈哈点PY来看这,我这文件夹一打开是这堆东西是有哈哈点PY的对不对?那哈哈点PY我还能再展开看东西吗?不可以,对不对?所以我得什么东西能展开文件夹,说白了你这个节点里面有没有子节点,有子节点我才能打开,很孩子,没子节点是不打开对不对?说白了接下来我需要去判断这东西到底是文件还是文件夹,对吧?那么判断,如果os.pass固定写法啊,点is DLL判断一下你给的这东西是什么,是文件还是文件夹来看,这就是判断文件是文件夹还是文件。那么这块is d。
24:07
判断它是不是什么文件夹,如果是文件夹,那么我在这看着啊,我们来先来个pass,再往下else else是什么了?这块这什么东西了,就是不是文件夹,那是啥了,普通文件对吧?普通文件不是文件夹了啊,不是文件夹了,不是文件夹你还能打开吗?打开打不开干嘛呢?很简单,我喷一下名字就可以了,喷一下它的名字对吧?文件名一喷,那么上面想想如果它还是个文件夹,继还是个文件夹,来想想我是不是还是文件夹,我再把它再给我打一遍是不是就可以了,对不对?大家再打开看里面什么,再打开看里边什么,能懂啥意思吧。OK,这时候就涉及到一个递归的入口和出口,递归的入口在哪呢?在这个位置,在这个位置,如果你是文件夹,你就再去像刚才一样把这东西给我打开,能懂啥意思吧,像刚才一样再给我打开,如果。
25:07
你是什么呢?你不是文件夹,你干嘛呢?给我打印就完了,所以这个位置是地归的出口,是地归的出口什么时候结束,当你这往里面往里打开打开打开,直到哎,你这东西不再是文件夹,是个文件的时候,停下来能听懂啥意思吧,是这个意思,好了好了,那么这会准备完了之后,我把这堆东西要干嘛呢?要给它组合成什么,分成函数来DEF,我们叫它read,我们叫它read,那么read的时候你要给他传个什么东西,传个什么东西是不是文件夹呀,对不对,你得传文件夹,文件夹过来我才打开,然后再往里面走,那么往下走看看在这个位置兄弟们,我传进来一文件夹,把这文件夹给我打开,打开之后呢,迭代迭代一下里边的元素,那么判断一下,如果迭代出来那个元素就是里面的文件夹,如果它还是文件夹,我要干嘛,我要干嘛是不是继续,不是继续就是。
26:07
再次干嘛?再次调用本函数干嘛呢?把这个文件夹再当成根目录,当成根节点,再给我来一遍,对不对,所以往下怎么写这怎么写,对的小括号里面写着EL,为啥写E,我打开的是这个,懂吧,你要打开的是这个,OK,搞定啊,来这块我们去打印一下,看看它有什么性能,哪些文件啊,来在下面访问一下,访问一下read返回一个来右键找你。看这打出来的是0203040506,为什么呢?打开,为什么呢?双击刚才特意让你们看了一眼,看了一眼什么呢?EL打印的是什么玩意儿?看好了啊,打印EL来右键打开,看这EL就是这个东西吧,那是这个东西吧,文件名吗?来文件夹名,那么这堆名字想想啊,想想我现在访问的地方在哪呢?是不是这个文件夹下的那个东西,是不是那么想想我这程序现在运行在哪?
27:23
我程序在哪,是不是在S15在这里面呢?是不是在这里面呢?那我直接让你去调哪个呢?调D02文件夹,是不是相当于在当前你所在的这个文件夹里面在找,是不是相对的调。能占同白吗?是不是相对径,因为你程序在这个里边的,你答的文言家是不是直接在这里边呢?怎么办?把它变成所谓的绝对径怎么办?想想我是不是把上一个电不好使,我是不是要把上一次循环那个东西,比方说我现在拿到D02了,想看零二里面的东西是不是这个样子,是不是这样子,那你每次都加吗?不是,甭管是不是这样子,是是这样子,那我想看D03怎么办,C03怎么办,是不是前面这堆东西加上谁,是不是加上D03,也就是说你每次循环的时候都要干嘛呢?是不是加上上一次循环那个路径是不是这样,所以那就好办了,这时候规律就出来了,我就需要干嘛呢?E在前面这块位置,你虽然是EL,但是你这只是个文件名,没有路径,那默认在自己那块找,找不到怎么办呢?在这块你需要用到os.pass.join你需要用到它,你需。
28:40
等到它把上一个那个路径名给它扔进来,把上一个路径名给它扔进来,那么扔进来的话,看着一个是pass,一个是等会它是两个参数,诶叫draw sheo,哎,Join,一个是pass pass,那么往里面我先把这个上一次访问的路径弄过来,把自己的这个文件名再给它拼去看好了,看好了我外层这个fair pass,比方说第一次进来的时候是这个路径是这个径是D盘下的Y,那么把它打开之后,有对零二有没有,有没有零二,有吧,有之后接下来看好了这个pass就是那个什么E盘,我space那东西对不对,然后把它打开EL是不是零二来它俩合一起是不是正好是我space斯零二是不是这样的,所以我在这下一次循环的时候,你把这路径给我插进来,把那个路径给我插下,要不然你只有一个文件名,你只。
29:40
只有一个文件名,来看着,接下来走,你。还没出来呢,等会儿啊,我把它干掉,等会啊判断啊,这块也要用这个我勒个擦。来这块也要用这个啊,这块用着也要用全路径来走,你出来吧。
30:04
咦咦咦,什么呀,这是对的,你把所有的打印对,我现在是把所有的文件名都拽出来看好啊,中间就有这么个插曲,这个插曲这是干嘛的?草是干嘛的,状元干嘛的?来这后面是你的文件名对不对,前面是什么,前面什么是这路径对不对,就是你的word space,后面跟上得Z02得拼起来,得拼起来啊,然后合到一起才能给你判断。好了,看好了,现在打印能看到零一课程大纲,作业讲解,循环格式化输出运算,这东西太多了,这么多文件说不好分呢,说不好分呢,那怎么分能好分一点呢?怎么看能舒服一点,怎么看能舒服一点,看着最好的,看着最舒服的方案是不是这面这个方案来一个文件夹,然后下面那一层给我来一个缩进,然后文件夹往里面在那层缩进,然后文件名文件名,然后下面一文件夹缩进,是不是这样的对吧?这样是最舒服的,那这样的话怎么来去控制它。
31:10
怎么来去控制它,想想第一次进来用缩进吗?不用来,当我访问D02的时候,要不要缩进,要几个缩进一个来电量里边的内容几个两个,也就是说你是不是往里面四个一层,每掉一次是不是多了一层,多了一层就多了一个所谓的这个数据的效果对不对?所以接下来我就可以干嘛呢?准备一个什么呢?准备一个这样的东西看着啊,给它来一个N叫循环深度,循环深度那么最开始的时候深度是几?最开始零对吧,最开始是零好了,最开始是零之后每次调用看好了啊,每次调用,每次反复调用,是在这吧,是在这吧,瑞每次打开的时候重新调它的时候,那么后面再给它补一个,补一个深度,补个什么深度N加一,那下次掉的时候原来是零,零进来零,然后零加一等于几呢?得一,下次再传进去是不是变成一了,这深度是不是记录下来了,那深度。
32:11
记录下来之后怎么玩。怎么玩,想想一个深度一个tap,两个深度两个tap,是不是控制tap的个数对不对?一个深度一个tap,两个深度2TAP怎么写,乘乘以乘以你叫什么呀?对的,你叫什么对的,一个一个深度一个一个深度是一个table吧,两个深度几个table,两个table啊三个深度是三个table是不是这样的对不对,那几个深度几个table乘法乘法啊看这看这,在我打印文件名的时候,加个什么呢?加个这个东西叫做什么呢?杠T是这table对不对,杠T打多少杠T呢?乘以N,然后呢,再打印你的文件名,再打印你的文件名来看这这时候就舒服多了啊。
33:04
这个时候就舒服多了,看着这上面这些东西,看不到哪来的,这个看不到哪来的来,我现在打印的都是什么东西,文件,文件名谁丢了谁丢了,是不是文件夹丢了,对不对,那怎么办怎么办,把文件夹再给我喷出来是不是就可以了,文件夹是不是也这么喷,是不是也这么喷,把它拿过来看这二在这个位置你调的是文件夹的话,在调用下一个函数之前,看R,把这文件夹再给我打印出来,打印文件夹来走,你效果就出来了,仔细看啊。仔细看啊,Idea里面是这东西,D02是这个东西来,D03是这东西,D04是这东西是不是文件的全部概例是吧?看懵懵懵肯定懵,看对看着啊,停停停,我知道写不出来肯定写不出来,你写不出来还要我干嘛呀,看这来。
34:07
来啊,再来一遍啊,再来一遍看这看这我们是怎么推出来的啊,怎么推出来的,这个推到过手比较麻烦啊,再推一下,现在我就给个文夹,我就给你个文件夹,然后呢,你需要把这个文件夹诶你给我打开,你给我打开,打开之后把里边的每个文件给我拿出来,甭管它是文件还是文件夹都给我拿出来,怎么拿呢?固定写法,这个没的办法,知道吗?叫叫什么呢?叫做os.list DR这东西就是把你的文件夹给我打开,给我打开你传送文件夹,它是把文件夹打开啊打开打开的话叫file pass,那现在打开的话是打开的是我space这样的所有东西是这样的吧,那么打开的话,这个地方我能接到一个什么呢?我接到一个比方说it啊,等于它,那么接下来我们刚才经过测试,这it是个啥来着?
35:07
可代对象,可对代的话,我就可以去迭代它,循环go element in it对吧?那么这时候我们可以去打印这个element来右键运行,你可以看到啊,这里面有这么多个文件来,现在你拿到的只是什么?只是文件能看到吗?就文件名啊,只是个文件名,那么现在想想我想怎么办呢?打开这D02,我想打开这D02你要保证哪些呢?第一你这个D02得是个文件夹,第二等于什么?第二是什么?你现在只知道它是要打开什么D02对不对,你还得知道什么是不是整个D02的路径对不对,你得有这路径,所以这个地方分成两块,首先我们来拿到它的路径,拿到路径路径拿到路径路径怎么拿呢?固定写法到f f pass等于什么呢?叫做os.pass点什么呢?叫join,为啥要join呢?
36:07
你要把前面这堆东西是不是跟D02拼一起,才是D02的胶,是不是这样,如果不拼的话,单纯的D02就相当于你在这个文件,因为你程序在这儿对不对?你在当前这文件夹找D02有没有没有对不对,怎么找才一定有呢?来把前面这一拼往里面拼个什么呢?拼一个Z02是不是这样肯定能找到对不对?所以它给了这么一个系统一函数叫os.pass join把人呢,把fair pass和谁拼一起,和你这个文件名拼一起,那现在我拿到的FP应该什么样的?兄弟们,FP仔细看啊,我这FP走你长什么样,是不是这样子,是不是这样子对吧?前面是什么路径名,后面是文件名,这是我们想要的了,对不对?拿到证之后我该干嘛了,是不是该第二个,第二个条件,第一个条件文件夹我们搞定了,不是不是就是那个文件路径搞定了,第二该什么呢?你得得是文件夹我才能往下走,对不对。
37:07
来看着往下,接下来判断来如果你的什么呢?os.pass.is dl这个确实不太好写,但是你要知道他在干嘛,懂吧,你要知道在干嘛干嘛呢?这是判断你给的是什么,是文件还是文件夹对不对?来来个这个东西往下走,那么如果是文件夹,我们先给它pass掉,那么如果不是文件夹,你要干嘛?不是文件,把这文件名打出来,注意我打文件名还要打印文件全径,我打印我给人看的肯定是文件名,那径那么长对不对,前面还都一样,所以我们去打印的是谁?是这个E,是这个文件名。好了,那么这块处理完了,该到哪了,是不是到这了,这是是文件夹,是文件夹怎么办?是怎么办?是不是把上面这一项的操作数再来一遍,是再来一遍,那重复操作对不对,我就可以考虑用谁呢?用地用递归的话,首先你这得是个。
38:07
啥呀?得是啥,得是个函数,懂吧,来把它推进去,来一个DEF叫read read里面要接收第一个参数叫做file pass,对不对,等会啊,写错了fair pass,来pass有了传进来,然后打开,接下来拿到,如果你是文件夹,文件夹的话,是不是这样的操作,再来一遍对吧?再来一遍怎么玩?来里面应该传谁?FP,为啥传FP,为啥传FP,你必须得是整个的路径,你光传一个文件的名是不够的,明白吧,文件名是不够的,因为你在这里面还是你把D02扔去,它找不到D02,它找不到零,你得是E盘下我什么什么,我space里面那Z02这样去找,所以我们要传的是什呢?是这个路径,那么路径扔去之后往下走,这就可以不要了,再往下走,那么接下来把这个路径,也就是D02,看啊,把D02当做一个路径,再传到这个位置,这个时候打开。
39:07
就是D02的内容了,那么这里面再打开,就是D02里面每个元素,每个元素在判断,如果它还是文件夹,接着去打开,那就是D02里面可能还会有其他东西,能明白吧,一层一层一层往里面走,那么我问你,就现在现在我这里面拥有的这些个文件夹,它基本上都是几层几层两层两层壁柜就完了,知道吧,它最大最大多少层,咱们看到了997对不对啊,所以足够了啊足够了,好了,现在弄完了之后,那么我们可以去调用去测试了,测试一下read呢,把这个file pass扔进去走你。看着所有的文件全都出来了,但是光有文件是不够的,还要打印谁呢?文件夹?文件夹在哪打印?是不是上面这是文件夹啊,对不对?文件夹怎么打印?Create谁是不是ELEL才是你的文件名,看这是EL,这也是EL,为啥中间这个多了它为啥勾勒他?我接着就日又遇到文件夹,对,又是谁了?文件夹了,对不对?文件夹要干嘛?继续去读取内部的内容,接着去往里面读,接着去往里面读好了这个地方就完了,完了之后再打印,你会发现。
40:25
对吧?文件夹的名字有了,文件夹名字有了,哈内零二这东西缩进没了,没有缩进不好看对吧?不好看怎么办呢?就找规律,找什么规律呢?看好了,我第一次进来的时候,第零层就最开始在这对不对这层,然后第二次进来的时候,第二次进来的时候应该是往里面走了一层对不对,再走的话又往里面又走了一层,也就是说你的递归深度决定了你的缩进的层数,所以我们要把递归深度准备出来,最开始是几呢?是零,是零,然后呢,拿一个数啊,你给我记录一下,然后每当我去调用一次递归的时候,干嘛呢?要N加一,一开始零,下次访问变成几了,变成一,再访问呢,变成二,再访问变成三啊,以此类推,那么现在我就有了一个深度的东西,有了深度该干嘛了?打印干嘛?是不是控制这玩意儿了,对不对,控制这玩意儿的很简单,就在这个打印文件或文件夹之前加个什么东西。
41:25
叫什么东西杠七,然后再干嘛乘以N对吧,来个逗号啊,下面也一样,下面一样来走,你跑起来看,最终的效果就是这样的效果啊,最终就是这样效果,因为啊不是为什么要用到递归来做这个事,因为我们每一层文件夹,每一层文件夹又是里面又有文件夹,又有文夹又有文件夹,操作是一样的啊,操作是一样的,OK,这个就是用递归去便利树形结构,树形结构你未来听好啊,遇到的每一个树形结构,你都可以考虑用这种方案,用这种方案这是通的,这个是通的啊文件系统可以这么玩,什么所谓的二杀术这东西也可以这么玩啊说完了。
42:16
收藏多。困了是吧?听不懂就困了是吧?来啊这什么了,我写什么,就是你笔记打在笔记上有没有有有这里面有,这里面有啊,怎么去打开文件文件夹啊,有这个东西好了,把这里面啊,尤其是接触到一些新东西看了啊,这个递归并不难,难的是这个东西啊,这个东西你们不认识是吧?这是干嘛的?打开改文夹干嘛的?打开文件夹对不对,就是打开文件夹来这地方是干嘛的?拿到路径对吧?获取到绝对路径,然后下面这是干嘛的,是不是判断是否是文件夹对不对,然后下面这是什么进行递归,这是什么呢?这是递归的入口,递归入口哪出口呢?这是递归出口递。
43:19
地归出口啊,地归必须要有出口,必须要有出口,地归如果没出口的话,就是死循环,就是死循环啊,好了,这个啊,听好了,琢课后啊课后去写一写啊,去写一写,去琢磨琢磨,没你想的那么难啊,好了,到这到这,然后接下来璧归完了。
我来说两句