目录
前言
本博客是作者学习时总结的笔记,如有错误还望指正。
模块的概念
我的理解:模块就是一个个的python文件,放到不同的文件夹里,去定义一些函数或者变量,然后在主要的那个文件中,可以引入这些文件中的函数或者变量,然后可以直接的利用这些函数或者变量进行程序处理。
包与模块
我的理解:包就是文件夹(确切的说还要带个__init__文件,不带也不是不行,但是不是官方认可的包),模块就是python文件。一个文件夹里可以放很多python文件,所以一个包里有很多模块。
大体形式如下:
就是文件夹而已,函数可以放到run_fill里,然后执行的文件可以放到run中,到时候直接用就行,避免了全放到一个文件里,不好维护,也很繁杂。
模块的导入
import-as形式导入
语法:import 【路径+库名】 as 【随便一个方便输入的名字】
实例:
文件夹长这样:
注意,我把那个__init__.py给删了,虽然我们目前这个包不是官方认可的包,但还是能用,但也还是有区别,后面整理有什么区别。
run_fill文件长这样:
定义了一个没什么卵用的函数,下面的单纯是为了检验函数有没有出错用的,忽略就行。
run文件长这样:
这个文件,我给他的定义是一个执行文件,主要的处理都是在这个文件里执行。
能得到这样的结果:
可以看到,在run_fill中定义的函数,能够在我这个执行文件run中执行。
讲解:
import,是一个把其他模块中的函数导入本模块中的一个关键字。
我们想调用run_fill中的函数,那么我们可以看到,run_fill在content文件夹里。
那我们就可以import content.run_fill来实现把run_fill中的函数导入到run中。
我们可以不使用as,但是后果是我们引用put_out函数的话需要输入
content.run_fill.put_out()
我觉的,没谁会想输入这么大一长串。
用as就会把content.run_fill给等价于后面的那个rf,让我们输入效率提高。
from-import形式导入
还是上面的那个程序包,我只改一下run文件。
修改后:
这个形式,我可以只导入run_fill这个文件中的put_out这一个函数。
好处:用import的那个形式,你会直接导入整个模块,有时候我们用第三方库的时候,我们只需要用几个函数,如果我们全导入的话,我们原本只有几kb的程序,你打包后,会发现他尽然有好几个mb,占内存很多,所以用这个方法可以减小内存。
form-import-*模糊导入
一个一个导入很麻烦,可以用*代替,后面的处理中,你想用啥函数直接用,用了他自动导入。
改run文件如下:
输出
直接可以用里面的函数了,只有你在后面用过的函数才会自动导入,如果没有就不会导入。
获取未知模块的函数
当然有时候,这个模块不是我们写的,我也不知道里面有什么,那可以用dir()来查看。
假设我现在闭着眼说瞎话,run_fill不是我写的,我想知道里面的函数。
后面有个put_out就是我定义的函数,这个a是我刚刚在run_fill里写的a=1
变量也给你拉出来了。
__init__.py文件的作用
前面的例子我说过,我把__init__文件给删除了,现在我给他加上。
加上这个文件之后content文件夹就变样了,说明python认可了这个包。
以后别学我删除,因为这个才算python认可的包,本来是想删除,到时候演示如果没有这个文件有些导入是导入不了的,但是莫名其妙的让我导入进去了
也不知道是编辑器的原因还是python版本的原因,不过你们尽量还是带上这个文件,以免到时候你们的导入出现问题。
__init__文件可以是空的,只要有这个文件就算是python的包,当然他也有他的作用
我改一下文件:
多加一个fill2
里面定义一个put_out2
__init__中加一个这个
输出这两个
可以看到,我无法导入run_fill2,原因是__init__中我配置了只能导入run_fill1,所以2就无法导入。
__init__配置语法:
__all__=["模块名",“模块名”]
只有在里面的才能被用*导入,但是如果指名点姓的导入还是可以的,他只能控制模糊导入。
菜作者纠错区
(当前空空如也)
python彩蛋
输入:import this
有开发者的彩蛋。