00:00
接下来我们来继续说我们这个模块,那我们会发现我们现在定义的模块还都比较简单是吧?像我们这个,哎,m.PY啊,里边就有这么几个函数,像我们这个TS这个,呃,Modu里边呢,以啥也没有对吧?啥也没有,但是我们想一下,我们真正到了开发环境下,我们写的模块,它是不是一定这么简单,当然可能会有这么简单呢,它是不是一定这么简单,诶不一定,也就是说我有些情况下可能会写一个功能极为复杂的一个模块,对吧?功能极为复杂模块,也就是说我这个模块是不是有可能会很大呀?诶,有可能会很大,那这个时候我们想想,如果我写了一个很大的模块,其实又变成我们之前那个问题,是不是又会导致我的程序诶过于的庞大,不方便我们去维护啊,哎,模块大了同样也不方便我们去维护,所以在Python当中又在模块的基础上。
01:00
进一步的给我们提供了一个新的东西叫什么呢?诶我们还是说创建一个新的文件来说,这个东西叫什么呢?叫做一个包,诶包是什么呢?包我们来说一下包我们英文叫做一个package paage叫做一个package,就是我们说的包,那包是什么?诶包也是什么呢?也是一个什么呀,模块啊,包也是一个模块,它只不过是什么呢?它只不过是一个比较什么呀,强大的模块啊强大的模块那包是用来干嘛的?首先我们来说一下什么时候会用到包,当什么呢?诶当我们这个什么呢?诶模块中的这个代码过于什么呀,过于多,哎,过多时啊,过多时或者什么呢?哎,或者我们一个模块需要诶被分解为什么呢?分解为多个模块时,诶这时我们就什么呢?诶就需要使用到我们的什么呀,诶就需要使用到包啊,就需要什么包,什么时候用到包。就是说当你这。
02:00
模块太大了,特别特别多,代码特别特别多,那这个时候你就要用到什么呀,那包有时你要把这个模块再去细分,把一个大模块再去细分成一个一个什么呀,小的模块,而这些小的模块我是不是要有一个位置统一去存放呀,这个位置就是我们说的什么呢?就是我们说的一个包啊,就是说包或者什么呢?你这一个模块可能需要分成十个功能,十个功能每一个功能都是一个模块,那这个时候你也需要用到什么呀,用到包,总之就是模块过大的时候,我们就需要什么呀,就需要包,那包跟模块有什么区别,那包也是一种模块,那我们说了我们普通的模块,普通的我们这个模块,它就是一个什么呀,诶就是一个PY文件啊,普通的模块就是一个PY文件,而什么呢?而我们这个包它是要是什么呀?诶它是一个什么呀,是一个文件夹啊,是一个文件夹,所以包和我们这个这个这个。模块普通模块区别就是普通模块就是文件,而包是一个什么呀?文件夹,我们可以来尝试创建一个,那在这儿我直接新建一个文件夹,在这我起一个名字,比如说我这个包我就叫一个hello,同样它也需要符合我们标识规范,那现在我是不是创建好了一个hello这个文件呀?诶,这个文件,但是这个文件夹对吧?但是现在它还不能称之为是一个包,因为它里边没东西,那我们先试试我能不能去引入这个hello啊,我直接来一个这个import的一个这个hello,然后在这儿我干嘛呢?我直接print一下这个hello,这一保存一执行,诶你看我这是不是也引入了到这个模块啊,哎,也引入到hello这个模块,但是这个时候这个模块里边什么都没有啊,什么都没有,所以注意普它也算是一个模块,但是它那个空的里边什么都没有啊,所以注意普通模块是一个P文件,而包是一个什么呀,文件夹,那包中有一个必须文件啊,包中诶必须要有一个什么呢?有一个叫做下划线。
03:56
大划线in it.py这个什么呢?诶这个文件,诶这个文件,那在这个文件中,诶这个文件中可以什么呢?诶包含有我们这个包中的什么呀?诶主要内容啊,主要内容什么意思?这是不是包有了呀,我们还需要在这里边创建一个新的文件,保存一下,这个文件我们叫什么呢?叫做下划线,音译的下划线,点一个PY,那在这个文件里你就可以写我们模块代码,这个就像你定一个文件包是一样的啊,比如说我这写一个,诶写一个A等于十,诶B等于一个20,然后我们来定义一个这个test,诶test呢,我们就直接简单一下,我直接写一个print,一个什么呀,Print一个T,我们就简写了啊简写了写到这儿以后你会发线,其实我们这个下划线,下划线一译的代码呢,跟我们之前那个模块代码是一样的,只不过它是放在一个文件夹里,那这个时候我们能不能用到呢?我们来看看啊,直接用法其实一样的,hello.a hello.b然后我们这。
04:56
来一个hello,点一个test,这一保存一执行是不是一个效果呀,哎,一个效果都可以去执行啊,都可以执行,但是它的好处是什么?好处就是它起到了一个什么呀,文件夹里,那你同学说这怎么算好处呢?我这么写以后它不更麻烦了吗?我还要创建文件夹,我还要写一个这个音译,它这是不是更烦了?诶确实如果从这个角度来看,确实有点麻烦,但是它的好处是什么?好处就是我在这个包里,我可以干嘛呀,我可以放其他的模块,比如说我放一个保存一下,我来一个a.PY然后呢,我再来一个。
05:32
新建文件,我来一什么呢?再来一个b.PY也就是说我在我这个包里是不是可以放其他的文件,我可以放1a.PY放一个p.PY也就是说什么呢?我在我现在hello这个包里就有两个子模块,一个是A,一个是2B,我在A里边也可以定义内容,比如说我在A里边,我来一个什么呢?诶,CA等于一个30,然后诶这是B是吧,这是里边我来一个C等于30 B里边呢,我来一个这个什么呀?哎,我来一个D等于40啊现在我这两个班我就简单定两个东西啊,进两个东西,但是我们真正开发的时候,我们内容是要更复杂呀,哎,更复杂,那这个时候我在引入的时候,我就可以选择了,我是想引入里边的A,还是引入里边这个这个B啊,这个B,但是我这个包起的名不太好,因为我这儿已经有AB了,对吧,我把这AB先给它去掉这一保存,那现在我再引入hello,我们来看看我们能不能看到这个A,我直接来一个hello.a这一执行走一个你会发现这个时候是不是告诉你没有这个A啊,因为我刚才把这。
06:32
A已经删了,那我怎么来引入包里边所包含的其他模块呢?诶那这个时候你可以干嘛呀?诶你可以直接指定的去引入,比如说我直接干嘛呀?诶直接来一个这个from hello来一个什么呢?诶iport一个谁呢?Iport a,那这就表示我要引入hello里边A这个这个包啊这个模块我们引入完了以后,一执行走一个,那这时候是不是看到hello里边A了,那这里边我直接来一个a.C这一保存一执行是不是看到这30了,诶我也可以来什么呢?来一个这个B,那这个时候我们再来一个什么呢?来一个这个b.D1保存走一个,是不是都能看到了,哎,都能看到了,那这就是一个包,那总之包的好处是什么?包的好处就是可以把一堆相关的拈功能,相关的拈块统一放到一起,诶放到一起,比如说我这个是一个计算器的包,那计算器我们都有什么呀?有加减乘除乘方,有什么开方,是不是有各种运算呀,那我这样我就可以把。
07:32
各种运算创建成不同的模块,加法一个模块,减法一个模块,乘法一个模块,除法一个模块,变成不同的模块,是不是统一放到这个包里啊,哎,方便我们去管理,并且你在引入的时候,你是不是也可以根据需要去引入,哎,去引入,那总之呢,诶,总而言之,包就是一个功能更加强大的模块,当你的模块功能太复杂,代码过多的时候,你就可以干嘛呀,使用包来处理这个事儿啊,使用包来处理这个事儿,好,那这就是我们包,这里边我们先简单了解一下,当然我们自己定义包的情况呢,没有那么多也会用到,那主要我们需要用到的是什么呀?别人给我们定义好的这个包,那这里先理解一下,那这里我们再来看,那你会发现,当我们去定义包以后,在这里边会多出一个文件,叫做一个下划线下划线PY,同样你会发现在我扣的里边也会多了一个下划线下划线PY,那这个是什么东西啊?这个什么东西,那以后你看到K,你要知道它是一个都是一个什么呀,临时文件或。
08:32
就是一个缓存的文件啊,缓存的文件,那这个P是干嘛的?P我们来说一下啊,P是我们什么呢?Cache啊,She是什么呢?诶是我们这个模块的一个什么呢?诶模块的一个缓存文件啊,模块的一个缓存文件,那这里边是干嘛的,我们来打开来看看,现在你在这儿看不见,因为我们的suble它把这东西给我们隐藏了,当然我们来找一下里边东西,它里边是有东西的,那我们来说它是干嘛的,那我们都知道我们的代码,我们的PY代码在执行前啊,在真正交给我们计算机执行前,它需要什么?诶需要备我们这个解析器,哎解析器干嘛呢?是不是要先转换为我们这个机器码,然后再执行啊,哎,需要转换成机器码,然后再执行,也就是说,我们所写的这些代码是不是都需要转换成101010这种二进制结构,然后再交给我们的计算机去执行?
09:32
但是这个时候就会带来一个问题,如果我每一次都转,每一次都转,那转换的时候我们说了,它这个性能是不是会比较差呀,所以每一次都转,每一次都转,它会影响我们这个性能啊,影响我们性能,所以什么呢?诶所以我们在什么呢?诶使用这个包时啊,使用包时也会什么呀,也会使用包,这么写吧,使用我们这个模块,或者你也可以说是包是吧,使用模块时也需要将我们这个模块的代码,诶先转换为我们这个机器码,然后再什么呢?诶再交由我们的什么呀?诶计算机执行啊,再交由我们这个计算机执行,而什么呢?而为了提高我们这个程序什么呀,程序运行的一个性能,诶为了提高我们程序运行的一个性能,Python干嘛呢?诶,Python会在编译过一次以后,编译过一次以后。
10:33
将什么呢?诶将我们这个代码保存到一个什么呢?一个缓存文件中,哎缓存文件中为什么要保存到一个缓存文件中,就是为了什么呀,避免重复编译啊重复编译那这样什么呢?诶这样在我们这个下次加载这个包时,哎这个包时哎或者加载这个什么呀,模块或者是包时就什么呢?诶就可以不不再什么呀,哎不再重新编译而是什么呢?哎,而是诶直接加载我们什么呀,哎缓存中的什么呀。
11:15
缓存中编译好的这个代码即可啊,总之这个的作用就是提高我们效率,就说你这用了完以后,你看啊,这个包,我现在把这个这个东西给它删了,我现在给他删了,删了它现在是不是没有了,哎没有了,但是你看着啊,我这一执行,它一执行完了,这文件是不是就出来了,诶为什么出来了,就是因为它这里边是有它这个编译结果的,那你下次再执行的时候,它就不用再重新再编译了,它直接干嘛呀,从这个缓存里加载,那这样是不是就提高了这个性能了,诶提高这个性能了,所以这里边他不让我们看,我们直接来看这原文件,Resource我们的这个,诶caer我们直接找到我们LESSON06这个,这个叫到我们这个code,在这是一个PY啊,你打开这里边是不是我们包临时的一个编译文件啊,你看都是一个PYC啊,PYC就表示它是一个编译过的文件啊,编译过的文件你直接右键打开,打开一个你会发现什么呀,它里边都是二进制编码啊,当然二进制它是以16进制形式显示的,但是文字上都。
12:16
不是1010这种二进制一个编码,所以以后再去运行的时候就不用再重新编译了,干嘛了,直接去加载这个编码是不是直接执行啊,诶提高我们的运行效率啊,这是我们说的一个PYK啊PY好,那里我们介绍了一下这个包,我们这里还是来评一下。
我来说两句