00:00
好,我们继续来说模块啊,那刚才我们这尝试创建了一个模块,但是这个模块实际上没有任何的作用啊,这个模块是没有任何的意义的,那我们要是真正的一个有意义的模块,你至少应该把一个东西给带过来,现在我们这个拈它里边是不是什么也没有啊,哎,什么也没有啊,所以这里边我们在定义模块的时候,需要往模块里放一些什么呀。诶,放一些东西,放一些数据,放一些对象,或者放一些函数,这些东西就说模块不能是空的,那这个时候我们怎么来定义一个有意义的模块,有意义的模块应该什么样的?哎,那这里边我们还是创建一个新的文件,呃,在这我们来17。还是来接着来说这个模块,呃,然后呢,我们在这来定义一个模块啊,这模块往前挪一下,这个模块呢,我简单定义一下吧,我叫一个M1M1.1个PY啊M1.1个PY或者叫M。M点一个PY,那这个现在就是一个这个模块,那现在我如果想在这个页面来引来用这个模块,那我直接干嘛呀?诶直接引po的M,这时候是不是就引进来了,诶引进来以后,然后在这我们来直接print一下这个M,这一打印,这是不是就打印出来了,哎就已经已经成功了,但是现在还是这个模块是空的,什么也没有,所以我们需要在模块里定义点东西,那么什么呢?哎,我们可以什么呢?哎我们可以,哎在我们这个模块中干嘛呢?哎,定义我们这个变量,比如说我这来一个A。
01:25
A等于十来一个这个B等于20,那现在我这个模块里边是不是就定义了两个变量啊,哎,两个变量,那定义完两个变量,那注意了我们什么呢。哎,在模块中,哎,我们定义的这个变量,哎,会什么呢?哎。在我们这个引入模块后,诶就可以直接使用了啊,直接使用了怎么用咱们来看,那现在我们来看,现在我们这是不是一个M呀,哎,M,那现在我要想看M里变量M点两个变量,一个是A,一个是B,我直接打印一下print的一个m.a然后我这再来一个逗号m.B啊注意通过M点的形式去访问啊,我们直接以保存与执行。
02:08
十二十是不是就有了呀,哎,有了啊,所以注意我们来说一下访问什么呢。访问哎,我们这个模块中的这个属性啊,我访问是我们这个模块名点一个什么呀?哎,点一个这个变量名啊,模块名点一个变量,这应该叫做一个变量,其实叫属性也可以是吧,我们还是叫变量,因为我们这是以变量的形式去定义的啊,直接模块名点变量名,你访问什么变量你就用什么名,你访问这个name就直接M点一个name,但是没有name,你这一访问就干嘛了,就报错了啊,就报错了,你可以访问这个变量中的这个,诶这个模块中的变量名,那你说能定义变量,我能不能定义函数啊?哎,当然能定义函数,其实主要我们会定义一些函数,我们也可以什么呢?可以在我们这个模块中我们定义函数,哎,同样。哎,可以什么呢?
03:00
哎,可以在我们这个模块,哎,外部访问。同样可以什么呢?可以通过我们这个模块访问的啊,访问的直接定义了啊,直接定义一个,我们定义一个叫做test test呢,我们这就直接了啊print,我们这来一个这个test,然后这再来一个DEF,我们来一个这个TEST2 test2我们这直接来一个这个print,我们来一个这个什么呀,哎,Test。Test啊,我们直接保存啊,别运行它是吧,别运行它在这我们来引入完了以后,那我怎么去访问这两个方两个函数啊,那你直接访问T,就是M点一个T1执行。报错了print print。TT啊,这一保存我们还是回到这来执行,走一个是不是执行了,你访问T2呢,直接M点一个T2走一个是不是也执行了,哎,也执行了啊,那这样我们就可以在我们的什么呀,哎,在我们这个模块里来定义这些东西了,啊定义这些东西了,这是我们说定义的。
04:05
函数,函数可以定义,那我能不能定义类啊,哎,也可以什么呀,哎,也可以定义我们这个类类,比如说我直接来一个class,我们直接来一个这个什么呀,来一个这个person p person,然后这我们直接来一个。In吧?嗯,下划线一个这个in in里边呢,我们就简单写吧,写一个这个self,点一个name,等于一个这个孙悟空,我们简写一下啊,简写一下。保存,然后现在类是是北定义啊,同样这类我能不能用啊,哎也可以去用,比如说你的创建对象直接P,等于这时候你就不能直接person了,你得什么呀,m.P因为现在这个类数保存到我们这个,保存到我们这个模块里啊,哎模块里,那这个时候你可以直接干嘛呢?哎,我直接print一下这个P。哎,Print一下这个P,我们直接一保存,这一执行是不是就也有了,哎,也有了,你也可以什么呀,P点一个name直接保存,诶,但是你我们先执行一下,是不是孙悟空也有了,哎,你看刚才我们打印名字的时候,你会发现什么呀?m.person object,你会发现这个什么呀?哎,这个类就是一个m.person啊m.person那如果什么呢?前面这m.M是谁啊,M就是我们这个模块的名啊,模块的名是这么一个效果,所以在模块中,其实你就跟编写一个文件是一样的,你可以定义什么,你可以定义变量,可以定义什么呀,可以定义函数,也可以定义什么呀,定义类定义完了以后,在其他文件里引入的时候,你都需要通过什么呢?通过我们的模块去访问到这些变量,这些函数,这些类,这些都是可以的,非常非常简单,那其实呢,我们模块就相当于是一个大的容器,在容器里边可以存一些数据,存一些代码,存一些东西,你需要的时候直接引入模块,引入完了干嘛呀,拿过来直接去。
05:59
使用是不是就OK了,哎,那这就是我们这样一个什么呀,这样一个模块啊,这样一个模块,那这个说完了,然后再来看,那其实呢。
06:09
照样用可以,但是有的时候我们不喜欢这样用,比如说我在这,我要用这个person,我还得m.P是吧,我要用这个T2还得m.PA2,我用A还得m.a对吧,很麻烦,那有些时候呢,呃,我想直接用,比如说我就直接想用P。哎,或者我直接就用A,直接用B,直接就用这个test,那这时候行不行呢?哎,那接下来我们再来说引入模块的一种方式,哎,我们也可以什么呢?哎,我们也可以引入,哎值引入我们这个模块中的什么呢?部分内容啊,比如说你不想全部引入,比如说你现在M这个模块里,你只想引入TS,你不想引入这个T2,那这时候怎么办?哎,那这时候你可以做一个什么呢?我直接来一个这个,哎我们来说一下语法,语法我们先用一个什么呀?From from后边跟的是我们这个模块名啊模块名,然后我们这直接impport的,Impport的号跟的什么呢?诶跟的是我们这个变量啊,跟总数变量,然后逗号,我们这是一个什么呀变量,然后省略号啊,你可以指定多个变量,比如说现在我只想引入模块里的person,那怎么办?我直接import谁呢?I不是import啊,我们是一个from啊,From谁呢?M import谁呢?
07:26
Iport的这个person啊,Import person,那现在我们就也是引入M模块,但是这个时候我没有引入M,我引的是什么呢?引入的是M里边的person,所以现在你如果打印M的话,你来看你实际上是没有M的,但是有谁呢?有person啊,你可以干嘛呢?直接使用person,比如说我直接来一个P1等于一个什么呀?诶person你就可以直接这么用了啊,可以直接这么用了,还是我们直接打印一下这个P1直接保存走,你是不是一个效果呀?哎,一个效果你也可以这么引入,那你说了我要想引入函数怎么办呀?哎,那你也可以再写from一个m iport我想引入谁啊,引入test,我直接引port谁呀,Test,那这个时候你就可以去直接去调用那个什么,直接调用test了啊,直接调用test这一执行test是不是执行了,哎就执行了啊,所以注意你也可以引入指定的某一个,那这个时候你会发现,如果我这么引入是是比较麻烦呀,比如说我想引入person,你想引入T怎么办呢?哎,你注意了我这变量之间是不是可以使入。
08:26
逗号啊,所以也可以怎么写呢,也可以这么写。直接走一个,你可以引入一个person,然后逗号来什么呢?Test,那这个时候你就引入了person和TEST2个,一执行效果是不是一样的呀?哎,但是注意了,我能不能去用这个T2啊,这一保存一直行走一个,哎,是用不了的,因为T2我没有引入,虽然有,但是我在这儿是不没有写呀,所以T2就不行啊,所以注意在这里也可以同时引入多个啊,引入多个来,那你说了,我想把里边的所有东西都引入进来,行不行呢?也也行,还有一种语法,我们直接写from m iport什么呢?Iport星这个效果什么呢?这个效果是引入M模块里边的所有的变量啊,所有的变量,这时候我一保存这一执行TEST2是不是也可以了,哎,P也可以,TEST2也可以再来一个,谁呢,T?
09:18
一保存走,你是不是都行了,哎,都行了啊,它可以引入到我们模块中的所有内容啊,它可以引入到我们这个模块中的什么呀,所有内容。所有内容,诶一般诶不会使用啊,一般不会使用这个东西也是我们不建议使用的,为什么它会引入到我们模块所有的内容,大家注意了,一般情况下我们模块里边会包含很多内容啊,包含很多内容,像这种如果你引入所有内容,首先它会导致我们这个模块过大,就是引入内容过多,有可能很多东西没用的,你也一起给它引入了,这是第一个问题,第二个问题,I的星,它实际上会干嘛,把我们模块里边所有内容引入到我们当前模块里,那实际上就相当于把这个模块里边代码干嘛了,直接复制到我当前这个模块,那复制会有什么问题,咱们来看啊,假如说我现在在我这个模块里边也有一个test。
10:11
定义一个,我们叫做一个TEST2 test2呢,在这我来print一个啊print一个这是什么呢?哎,这是我们这个主模块。主模块中的这个TEST22,那现在注意我这是不是也有TEST2啊,但是当我这一引入我看啊,我这掉一下TEST2,我们来看是谁走一个是不是还是那个T2,也就是说实际上我这个TEST2是是把它给覆盖了,哎,把它给覆盖了,所以当你去用I的星的时候,就会有一个很大的问题,Po的星,你会把我们这个那个模块里边的所有的变量都会引入到我当前模块的全局作用域中,所以如果两个模块当中有同名的变量的话,它会导致什么呀冲突,也就是说后边的会把前面给它覆盖掉,也这也是为什么这种方式不推荐使用的原因,所以这个了解一下,知道有这么一个东西,一般我们是不会去使用的啊,一般我们是不会去使用的啊,这是我们说这么一个模块,然后再往下说,还有一种语法啊,我们来说一下,还有一种什么呢?哎,我们也可以什么呢?哎,也可以为引入的这个变量干嘛呢?哎,使用我们这个别名那。
11:23
现在比如说我这引入了一个。T2,我还是想引入TS2,但是不巧的是,我现在这是不是已经有了一个T2啊,那这个时候你这个东西还叫TS2,是不是跟他重名了,哎,重名了怎么办?你可以这样。来语法写一下叫什么呢?还是from模块名,然后这直接iport import什么呢?变量,变量后边再跟一个谁呀,哎,S我们的一个什么呀,别名,那这时候你可以单独为这个变量指定别名,所以咱们可以怎么写,我直接来一个from模块名,是我们一个m import,谁呢?F,哎,叫做一个TEST2,这样我如果引入的话就会把它覆盖,我们来看直接来一个test这一保存。
12:09
我们这一直行走一个是不是T2啊,但是现在你不需要覆盖怎么办?你后边直接来一个S,我们来一个new一个T2,那这个时候注意它现在就不叫T2,它叫new t2 T2还是谁?还是我原来这个,我们这一保存一执行是不是还是T2主模框T2,那这时候你要想调这个M里边的,你要怎么调,你要调的是一个什么呀,New一个TEST2,这一保存一执行是不是就OK了,哎,就OK了啊,所以注意也可以给我们这个模块中的这个变量去起这个什么呀,起这个别名啊,起这个别名,那这个就是模块里边的一个具体用法啊,你可以在模块里边去放变量,也可以去放什么呀,哎,放这个这个这个类啊,也可以放各种各样的东西,想放什么就放什么,但是注意了,那我们这定义完了一个模块,我们先说第一个问题,那我们定义完这个模块,它不一定我模块里边的所有东西都希望被外部访问,也就是说我希望模块里边有些东西是什么呀?是私有的,我希望有一些。
13:10
东西外部是看不见的,诶看不见的,那你会发现当我们一使用一个important星以后,这个是把我们模块里边的所有内容都引到了,哎,都引到了,那我们如果想在模块里创建私有属性怎么办?那比如说我这一个C变量,C变量C等于30,我希望这个变量C只在我模块内部可见,在内部可以访问,但是在外部访问不到怎么办?诶你可以在C前面加一个下划线。加一个下划线啊,那这里边我们来说一下叫什么呢?添加了下划线的变量。下划线的变量只能在我们这什么呀?哎,模块内部访问啊,只能在我们模块内部访问,它不是什么呀,公有的外部是看不到的啊,外部是看不到,当然我们说的是隐po的星这种情况啊,星这种情况我们来看看,那这里边我们直接来看一下,我们直接来一个什么呢?哎,来一个这个impport的一个这个什么呀,哎叫做一个T,哎不是T。
14:14
啊,这找错页面了。保存一下关掉啊,我们找的是这个模块啊,我们这先给他住了。这时候看着了,我直接来一个from,我们先这么写吧,我们先来一个这个impport的M,我直接引入M里边是不是有一个C啊,这个时候我们直接打印一下M,点一个下划线C,这一保存一执行,这个候是不是能访问呀?诶因为这个时候你是把整个模块都引入了,它里边东西你都能看到啊,都能看到,但是我们如果是这样写,哎,我们直接来一个from from谁呢?Mport一个什么呀?Impport的一个星是不是引入里边所有内容啊,哎,所有内容这里边我们直接一保存,咱们来看效果啊,这一执行干嘛了?是不是C没有定义啊,哎,C没有定义,所以这个时候注意这种情况就没法访问了啊,就没法访问了,所以注意哎。
15:04
只能在模块内部访问,在什么呢?哎在哎通过我们这个imp的星引入时。哎,不会什么呀,引入我们这个下划线开头的什么呀,变量,哎,函数类也是一样,如果你希望他们是私有的啊,如果你希望他们是私有的,你就加一个下划线,这样通过iport星引入的时候就不会被引入啊,就不会被引入,好这是一个,然后再往下说,那这个模块我们开发完了,对吧?那我们想想,假如说是在我们工作环境中,很有可能这个模块就是分配给你的工作,这个模块就是你来开发的,但是这个模块是你来开发,你开发的时候你总不能写测试吧,你是不是得写一些测试啊,比如说在这我写一些测试代码。哎,我们这来编写测试代码。测试代码啊,我直接来一个,哎,我来一个,我调一下test,再调一下test,二我再来一个P,等于个这个person这些是不是测试代码啊,哎,我来测试的,我这一执行是不是test执行了,两个都是T啊,这应该掉一个T,二这一保存是不是执行了,哎我再打印一个,打印一个一个这个P点一个NAME1保存一执行是不是都没问题啊,诶都没问题,这是测试代码,但是注意了,那我换到我们的这个模块里,现在我现在在这里边去引入它的时候会有什么问题,看效果啊,我这一直行走一个。
16:33
GF干嘛了,这些测试代码是不是也执行了,哎,也执行了,那这个时候当我们M这个文件,它是作为模块去引入的时候,我们这些代码我们还需不需要执行,诶实际上是不需要执行,因为它只是测试的,不是说你引入的时候它就不需要执行了,对吧?所以这里边我们来说一下。这部分代码,哎只有什么呢?哎只有,哎只有什么呀,那什么时候执行测试代码是测试的时候执行,什么时候测试,诶只有当我们这个当前文件,诶作为什么呢?作为这个主模块的时候,才需要执行,才需要执行,而什么呢?而当我们这什么呢模块诶被我们这个其他模块引入的时,诶它是什么呀,它是不需要执行啊,不需要执行的,也就是说这个代码不是说什么时候都执行,如果你当前模块是主模块,OK,执行没问题,而你当前模块如果是被其他模块引用的,那这个时候这堆代码还执不执行了,诶我们是不是就不希望他们执行了,那怎么办?那所以这个时候我们就需要什么呀,诶此时我们就什么呀,哎就必须要检查什么呢?我们当前模块是否是主模块啊。
18:00
当前模块是否是主模块,怎么检查,非常简单,直接来一个if,一个下划线name,你看有线成代码等等于这个闷,如果你的名字等于闷,那是不是证明你是主模块,主模块你就执行,执行怎么办?把这里边什么缩进就OK了,如果你不是主模块,还执不执行了,哎,就不执行了,是不是就不是闷了,哎就不是闷了,那这个时候改完了以后,我们来看效果,这一执行执行了吧,现在它是作为主模块去执行呢,但是来看现在我在这是不是去引入啊,引入的时候我们再来看效果,走一个执没执行,哎就不会执行了啊,就不会执行了,那这个才是我们一个模块的一个标准的编写方式啊,标准编写方式,什么标准方编写方式,首先我们会有一些变量,当然也跟你需要啊,跟你需要,你可以定一些变量,你也可以定义一些什么呀,私有的变量啊。函数啊,可以定义也可以什么呢,也可以定义类,当然你的测试代码都要写到判断里,判断里都是当你的什么呀,模块是主模块的时候才会执行这些代码,如果不是主模块,这些代码通通都不会执行啊,都不会执行,那这个就是我们模块的一个什么呀,使用其实并不难啊,并不难,其实主要说这么几个什么呀,I input的这个iport隐句,Iport语句,我们说了什么呀,我们总结一下这个。
19:18
总结一下port的impport的,我们来总结一下有几种,首先我们直接啊,我简单写一下I put impport,一个叉叉对吧,叉叉然后什么呀,还有iOSe的一个什么呀,叉叉S一个YY,是不是可以起别名啊哎,起别名还有什么呢?还有一个这个from叉叉然后什么呀,诶,Imp impose什么呀,Impose的一个YY诶然后什么呀,ZZ诶然后什么,然后FF,然后什么这写了是吧?哎,这样或者还可以写什么呢?From叉叉,我们直接来一个impport的什么呀,Impport一个星啊impport星引用所有或者还有什么呢,叉叉,然后一个。引破的一个YYS什么呀,ZZ给单个方法去取别名啊,取别名一共这么几个引入方式,然后如何定义没什么可说的,但是你要注意,我们模块里都需要有这么一个判断,把你的测试代码不需要作为模块的代码执行的代码都放到这个判断里,这样就确保什么呀,哎,在模块作为模块执行的时候,这些代码不会去胡乱的执行啊,不会去胡乱执行,好,那这个就是我们说一个模块使用就这么多,接下来自己尝试定义两个模块,然后用这个什么呀,Import去引入一下,测试一下,我们来评一下。
我来说两句