00:00
那接下来我们来说一下我们这个模块化的一个这个应用啊,那我们说了介绍完了模块,我们先来说一下到底什么是模块啊,什么是模块,那我们就来说一下,在我们这个Python中,我们一个PY文件就是一个模块,诶一个PY文件就是一个模块,一个文件就是一个模块,所以现在像我这里,我这是不是有16个文件呀,在这儿我实际上就有16个模块啊,一个文件就是一个模块,有几个文件就是几个模块,每一个拍子文件就是模块,所以我们要想创建模块,诶要想什么呀?诶创建模块实际上就是什么?哎,就是创建一个什么呢?诶Python文件啊,要想创建模块,实际上就是创建一个Python文件,所以这里我们要想创建一个模块,怎么办?我们要创建一个PTHS文件,比如说我在这里边,我们来创建一个什么呀,诶模块,那这里边注意了,注意我们的模。
01:00
模块名啊,模块名要什么呢?要符合我们标识符的一个什么呀,标识符的一个规范,像我这些模块名其实都是不标准的,都是不标准的,因为你现在我这出现这种什么数字开头,并且是不是包含这种中文了,它都不是包这个标准的模块名字,而我们标准的名字要干嘛,要符合我们标识物规范,那这些名无所谓,待会我们来说一下为什么无所谓,但是如果你要去真正去创建一个合格的模块的话,就必须要符合什么呀,标识符规范包括什么呀?哎,标识符规范什么呀,包括字母,数字下划线,不能以数字开头,不能是关键字保留字,这些规范都要去遵守,所以在这我们来创建一个模块,直接写一个,那比如说这个模块我就叫一什么呢?保存一下,我就叫做一个这个test啊test我们叫做一个Mo test,一个model,我们的一个测试模块,那这里我们就创建好了一个模块在。
02:00
这我直接写一个print一个P,这写A忘忘记写什么了,哎,忘记写我们扩展名了,重名名一下,我们这直接来一个点一个PY啊,不要忘记写它的这个扩展名直接打开,那在这里我们就可以尝试去写一点我直接print的一个啊来写一个,哎,我是一个模块啊,我是一个模块,一执行是不是就OK了,哎,那这里我们就创建好了一个模块啊,创建好了一个模块,好,那创建好了模块,我们要怎么去用这个模块啊,怎么用模块啊,好,那现在我们来想一下,如果我这创建完这个模块,那现在我这个test Mo test module它就是一个模块啊,Test module它就是一个模块,那现在这个模块创建好了,模块里边是不是有代码啊,那好,我问你了,现在我创建完这个模块,而我这个模块里边的代码只能在他自己里边用,那这个模块还有没有意义,哎,没有意义,也就是说我们创建完这个。
03:00
模块,这个模块它不能只能自己用,这个模块它是不是应该可以被其他模块去引用啊,哎,我A模块引用B模块引用C模块引用B模块,也就说我直接在A模块里边去调用B模块C模块D模块代码,那这样模块才有意义,你创建模块只能自己用,那是不是没有义啊,所以这里边定义模块非常简单,就是创建一个文件,仅此而已,那接下来我们要说的就是什么呀,如何去引用模块如何什么呢?哎,如何在在我们什么呢?哎,其他模块中,哎引入。这么写吧,哎,在一个这个模块中干嘛呢?我们来引入我们这什么呀,外部模块啊,在一个模块中引入外部模块,那我们这块怎么引入,那这里边我们来说的第一种方式,第一种方式我们怎么引入的,就叫什么呢?我们用的是一个iport啊impport的引入iport的后边真的是我们这个模块名啊,后边真的是我模块名,这样就可以引入这个模块,那怎么引入啊,怎么引入模块名又是什么?那注意了,我们这块来说一下模块名。
04:12
就是我们这个什么呀,哎。Python文件的名字,哎,Python文件的名字注意,诶注意不要PY,就是Python文件的名字不要PY,所以现在假如说我想在这个文件里边来引入我们这个test module,那这个时候我就需要整一个什么呀,诶需要整一个我们来一个import,我们这直接来一个test,我们来一个这个什么呀,哎,Module直接来一个test Mo Du module,那现在这个模块就已经被我引入了,哎,被我引入了,那怎么知道引没引入,那现在注意我现在在test modu里边,我们是不是掉了一个print呀,哎,Print,而我在16这个模块里边是不是没有掉啊,哎,没有掉,好,现在我直接执行16这个模块里边代码直接执行,那如果真的引入成功了的话,那test modu里边代码是不是应该执行了,哎,我们来看看啊,直接执行,我们直接来一个F51运行走一个。
05:14
是不是执行了,哎,执行了,我们这换一个,我这改一个字。我是太妈。模块啊,我是test妈这个模块把它往前挪啊,往前挪这一保存现在来看啊,我还是执行16啊,直行十六一执行是不是执行了,哎,也就是说我实际上在执行16的时候,我执行到了test modu里边这个代码,那就证明这个模块是不是确实引入,引入成功了,哎,引用成功了,那这样我们就成功的引入了这个模块啊用这个模块,但是这个时候它会有一个问题了,那你这模块有啥用啊,有啥用啊,诶注意确实如此,这个模块现在是一点用也没有啊,一点用也没有,因为它里边就是一个打印语句,你引用它的效果就是打印这么一句话,其他作用全都没有,但是现在我们先演示一下,你知道怎么引入,我们用的什么引入,用import引入啊,用import引入,那现在来看啊,我能不能引入多次啊。
06:06
能不能引入多次,我这一保存,现在我们是不是已执行了三次,哎,执行了三次,我们来看效果啊,我这一执行来看,我是引入了三次,但是他只执行了几次,只执行了一次啊,只执行了一次,那这里边什么意思啊,什么意思,那注意了,我们来说一下。我们可以在什么呢?哎,我们可以在我们这个。哎,我们可以引入。同一个模块多次啊,我们可以引入同一个模块多次,也就是说你这个test,诶module你可以引入100次,1万次,1亿次,你想引入几次就几次,但是模块的这个实例,诶只会创建什么呀,只会创建一个,换句话说,我们的模块它实际上是我们说一个叫做单实例的,它的实力对象只会有一个,你这即使引入100次,1万次,引入了多少次都行,引入了10次,你会发现我虽然引入了三次,这个代码是不是只执行一次啊,所以这块注意我们模块也是一个对象,同一个模块对象在我们的程序中只会创建一次啊,只会创建一次,所以你这虽然引入三次跟引入一次没有区别,你就记住了,模块的实例只有一个啊,你在这个文件里入一次,那那个文件里引入一次,它们是同一个对象啊,同一个对象,好,那这块我们就说完了对吧,引入我们这个模块,那引入完了有什么变化呀?哎,那注意了,现在引入完了以后在我们这我就可以。
07:33
可直接去print print谁呢?Print,我们这个test一个什么呀,Mar啊test Mar我直接保存一执行,那现在你会发现是不是打印这么一个东西,哎,这个打印我先给他注了,这我先不打印了,你会发现当我引入了以后,我这一打印这个test module在我这里边是不是出现这么一个东西,诶出现它以后就证明我们这个模块就引入成功了,你看module叫做test module from,这是文件的一个什么呀,路径啊,这文件的一个路径。
08:02
好,那这个时候引入完了,是引入完了,那这个时候我们会发现,其实我引入完了这个模块以后,这个模块。这个名起的太烂了,还叫泰modu,这名是不是太长了,我想让这个名啊简化一点行不行啊,哎,也可以,那在这里边我们来说一下引入模块的第二种方式。第二种方式同样也是一个叫做impport的,后边也是模块名,不同的是后边多了一个S,哎,S是什么呢?是我们模块的一个别名啊,模块别名什么意思,看这了,我这还是我直接复制一下,还是import test module,但是这个时候多一个S叫做test啊,S test什么意思,那现在就等于我还是引入这个模块,但是我给这个模块起了一个别名叫做test,现在你在用test module,你这时候看干嘛了,是不是报错了,告诉你他没有定义,那这时候你要用什么,你要用test,因为现在你已经给它起了一个别名,就叫什么呀,就叫test词,这时候一执行是不是才有啊,哎,才有,所以注意这个是一个什么呀别名,你就说你觉得那名不好,太长或者什么呀,或者你现在里边也已经有这名儿,你的文件里边已经有这个名了,那这个时候你就不能再叫它了,那这个时候你也需要起一个什么呀,叫做一个别名给它改个。
09:25
名啊改个名,那这个是我们impose叉叉叉S一个叉叉啊,可以起一个这个别名,那这就是我们说的一个引入这个什么呀。模块啊,引用模块,那这里面注意啊,我们还要再强调一点,一我们什么呢?我们的iel iel可以什么呢?可以在我们的什么呀?哎,程序的这个任意位置调用,你看啊,我现在在上边调了,我在这调在print下边调行不行啊,哎,行,你可以在我们程序的任意位置调用,在哪调用都行啊,在哪调用都行,但是一般情况下。
10:02
我们的什么呢?哎,我们的import语句都会什么呢?哎,统一。写在我们这什么呢?写在我们这个程序的一个开头,像这种iport语句你写哪都行,但是一般情况下我们的iport的都是干嘛呀,从第一行开始写,所有的import都写到开头啊,Import都会写到开头,为什么写开头,因为写开头以后是方便我们识别呀,我能看到我当前模块引入了哪些模块啊,引入了哪些模块,好,那这个就是我们说的一个这个模块啊,引入模块,然后接着来说。哎,每一个模块都有它的名字什么呢?诶在我们这个每一个模块内部都有一个叫什么呢?下划线,下划线内幕属性啊,内幕属性name什么意思呀,名字啊内幕属性。那什么呢?诶,通过这个属性可以获取到我们这个模块的一个名字啊,获取到模块的名字,那比如说我们来看一下我们这个模块,我在这直接print一下,Print一下我们这直接来一个下划线,下划线内直接打印。
11:13
下划线,下划线一个name啊,你跟我们那个这个这个呃,特殊方法这个语法一样,前后双下划线也是一个隐藏属性啊,在这儿我们直接一执行这个我先给它注掉了一保存,我们这一直接F51执行叫什么,是不是叫t Mo,也就说我们这个模块的名字叫test Mo或者呢,我们来看看在这我能不能打印啊,在这我能不能打印,我直接来一个print,一个什么呢?一个这个test点一个下划线,下划线一个猫ger。诶,Name直接保存,我在这一执行是不是也可以获取到啊,叫test包啊,所以注意通过我们这个下划线name可以获取到我们这个模块的名字,其实就是那个文件名,但是这时候有问题了,诶那老同学说老师那那你这16模块这文件它也是一个模块,我能不能获取到它的名字呢?哎,也可以啊,也可以怎么获取,其实一样直接print,我们来一个下划线一个name,那你猜猜它这个名字是什么啊,它这个名字是什么?在这里我们一执行走一个叫做一个闷,叫做一个闷,诶刚才模块名不是就是模块文件名吗?但是你这为什么获取到是一个闷,我这文件名叫16点模块,而这个叫做一个闷呀,怎么不一样啊?哎,怎么不一样啊,那注意了。
12:30
我们来说一下。Name属性值是什么呢?属性值为,哎,我们叫什么呀?刚才看到了叫什么呀,叫下划线下划线闷啊下划线下划线闷,为什么呢?为下划线下划线闷。模块是什么呢?是主模块啊,是主模块,我们什么呢?我们一个程序中只会有什么呢?只会有一个主模块啊,只会有一个主模块,那主模块是谁主模块。
13:07
就是我们通过我们什么呀,我们直接通过我们这个Python。执行的模块啊,主模块就是我们直接通过pon执行的模块,那你现在来看,现在我们的主模块就是16模块点PY,为什么它是主模块,因为现在我们是不是按F5去执行的这个文件呀,所以现在它就是主模块啊,它就是主模块,那同学说老师你看直接执行这个test,诶mandu呢,哎,那直接执行谁谁就是主模块,我要是直接执行它,我们一执行走一个,它就是主模块,看到了吧,诶直接执行谁谁就是主模块,如果直接执行这个,这个就模块,直接执行这个,这个就是主模块,这也就是为什么我们之前取的名字不用符合标识规范的一个原因,为什么不用符合,因为这些模块我们都是直接执行的,他们都是主模块,那既然都是主模块,所以他们的名字都是下划线men,都是下划线这个men这个名字,所以我们就不用去严格按照标识规范,而现在我们这个test module这个模块,它是不是我们需要去引入的呀。
14:14
哎,引入,那它的名字就是模块名,那模块名其实在这里就相当于是一个变量,那既然是变量,是不是就要必须符合我们标识符的一个规范,哎,必须符合标识符的一个规范啊,那这个是我们说的一个什么呀?哎,模块的一个这个介绍啊,我们说了什么,怎么去定义模块,一个模块就是一个Python文件,那注意它的名字必须符合标识符的一个规范,那第二一个我们怎么引入模块两种方式,不起别名,直接引po的,起别名就是引po的模块名后边S一个什么呀,一个这个别名给他起一个起一个名啊起个名,然后我们又说了一个什么呀,内幕属性,每一个模块里边有内幕属性,内幕属性就是模块名字,那对于主模块来说,它的名字就是什么呀,就是闷闷就是主,主要的意思啊,主模块,那这个是我们说的一个模块的一个创建啊,模块一个创建,我们在这儿先停一下。
我来说两句