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 相对导入:参照当前所在文件的文件夹作为起始点开始查找,称之为相对导入。

符号:.代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹。

优点:导入简单。

缺点:只能在导入包中的模块时才能使用。

注意:相对导入只可用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内。

posted @ 2020-03-17 21:35  越关山  阅读(160)  评论(0)    收藏  举报