模块与包
一、模块
1、模块是怎么诞生的。
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到 不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。
2、模块的作用。
提高了代码的可维护性。其次是编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
3、模块的分类
1.系统内置模块,即python标准库
2.第三方模块,即他人编写好了的模块,直接下载下来用就可以了(scary,requests等)
3.应用程序自定义模块,即编程人员自己编写的模块。
4、模块的导入方式。
1.import 语句
格式:import 模块名
注释:模块导入时如果是内置模块会直接被导入,如果是第三方模块或者是自定义模块则会根据sys.path所给的路径进行查找。
一个模块可以在当前位置import多次,但只有第一次导入会执行源文件内的代码,原因是:第一次导入就会将模块包含的内容统统加载到
内存了,以后在当前文件位置的导入都是指向内存中已有的模块
2.from…import 语句
格式:import 模块名 import 变量名
注释:这个声明不会把整个modulename模块导入到当前的命名空间中,只会将它里面的变量名单个引入到执行这个声明的模块的全局符号表。
3.补充.
当import一个模块时,首先会立刻创建一个新的名称空间,用来存放该模块中定义的所有变量的名字;然后会在该名称空间内执行foo.py内所有的代码,
最后需要知道的是import关键字就是定义了一个名字,只不过此刻我们用import定义的是一个模块名字foo,该名字就是指向foo.py的名称空间,而foo.的方式
就是从该名称空间里找名字,可以使用foo.__dict__来查看这些名字。
注释:import的两个过程: 创建新的名称空间 {名字:对象和}执行被调用的模块 (第二次不会被执行)。
二、包
1、为什么会有包。
如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package),引入了包以后,只要顶层的包
名不与别人冲突,那所有模块都不会与别人冲突。
2、什么是包?
包的作用和文件夹的作用相同,只不过与文件夹的区别是新建一个包会自动产生一个__init__.py的文件,该文件可以写内容也可以不写内容。__init__.py的
模块名就死对应的包名,意思就死说当你直接调用这个包的时候实际上是调用包下面init里的东西。
3、如何调用包内模块
1.如果调用模块和被调用模块在同一个包内,俩模块是属于亲兄弟关系那么这俩模块可直接被调用。
2.如果调用模块和被调用模块在同一个包内,俩模块是属于亲叔侄关系,那么需要以from 包名 import 模块名 来调用该模块
3.如果调用模块和被调用模块在同一个包内,俩模块是属于表叔侄关系,那么久需要调用os模块吧被调用包的路径加到sys.path中去。
eg:import os,sys #调用模块
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#调用文件路径
print(BASE_DIR)
sys.path.insert(0,BASE_DIR)#添加到搜索路径