python中的包
python中的包
一 包
1 什么是包
包是一个含有
__init__.py文件的文件夹,本质就是一个模块,是用来被导入使用的。
2 为何要使用包
包的本质是一个文件夹,那么文件夹唯一的功能就是将文件组织起来。
随着功能越写越多,我们无法将所有功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来。以此来提高程序的结构性和可维护性。
3 包的使用
3.1 注意事项(3个)
(1) 关于包的相关导入语句,也分为import和from...import...两种,但是无论哪种,无论什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点左边必须是一个包,否则就是非法导入。可以带有一连串的点,如item.subitem.subsubitem,但是都必须遵循这个原则。但对于导入后,在使用时就没有这些限制了,点左边可以是包,模块,函数,类(它们都可以使用点的方式调用自己的属性) 。
(2) import导入文件时,产生的名称空间中的名字来源于文件,即包下的
__init__.py文件,导入包的本质就是在导入该文件。
(3) 包A和包B有同名模块也不会冲突,入A.a和B.a来自两个名称空间。
3.2 首次导入包aaa这个文件时发生的两件事:
(1) 创建模块的名称空间,运行包下的
__init__.py文件,将运行过程中产生的名字加载到名称空间。
(2) 在当前空间创建一个名字aaa,该名字指向
__init__.py的名称空间。
3.3 包的使用之import
单独导入包的名称时,不会导入包中存在的所有子模块,只会导入包下
__init__.py文件中有的名字,即需要使用到的名字,都需要首先在__init__.py文件的名称空间中存在/关联。
3.4 包的使用之from...import...
需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c 是错误语法。
但是可以这样使用:from aaa.m(模块名) import c(功能)。
3.5 from...import *
使用该语法会将包下
__init__.py文件中所有的名字导入当前名称空间,不推荐使用,可以通过__all__来控制*导入的名字。
3.6 绝对导入和相对导入
绝对导入:以包的顶级根目录作为起始。
相对导入:用 . 或 .. 的方式为起始(只能在一个包内使用,不能用于不同目录内) 。
3.7 包以及包所包含的模块都是用来被导入的,而不是被执行的。环境变量,是以当前执行文件为准的。
超出当前环境变量sys.path的文件存放路径,都需要进行环境变量的添加!
3.8 绝对导入和相对导入总结
3.8.1 绝对导入:以执行文件的sys.path为起始点开始导入,称之为绝对导入。
优点:执行文件与被导入的模块中都可以使用。
缺点:所有导入都是以sys.path为起始点,导入麻烦。
3.8.2 相对导入:参照当前所在文件的文件夹作为起始点开始查找,称之为相对导入。
符号:.代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹。
优点:导入简单。
缺点:只能在导入包中的模块时才能使用。
注意:相对导入只可用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内。

浙公网安备 33010602011771号