python中包的使用

在以前的文中介绍了模块的导入https://blog.csdn.net/qq_44801116/article/details/89242703
本篇文章继续上篇文章介绍包的导入。
讲述之前我们先明确如下:
在这里插入图片描述
一、简介
在现实应用中,通常将功能不同的程序文件放在不同的目录下,同目录保存同类功能的程序文件。
在Python语言中,包是一种管理程序模块的方式(也可以理解包本身即为一个模块)。包可以管理多个功能模块,尤其是当某个Python应用程序或项目具有很多功能模块时。
二、包的定义
在Python程序中,包实质上就是一个带有__init__.py文件的文件夹或者目录。
(1)init.py文件:表示这是一个包,init文件可以是一个空文件,也可以包含一些初始化代码或者变量__all__赋值。(目的避免一些文件的命名影响搜索路径中的有效模块。)
(2)包中还可以嵌套子包。
本文涉及到的目录结构如下:
在这里插入图片描述
文件结构说明:
说明在module_import下面实现了描述我家庭每个人的特点;
在module_import同级目录下,另外有一个family.py文件和package_import目录。
三、包导入的需明白的知识点
(一)导入包的本质是执行导入包中的init文件
验证如下:
(1)在modul_import的init文件中写入如下代码:
在这里插入图片描述
(2)在family文件中直接import Excercise.module_import,如下图所示:
在这里插入图片描述
由上可见,最终输出的为print的语句。
(3)我们将family中内容不变,init文件中代码更换为如下(不理解的可参照模块导入https://blog.csdn.net/qq_44801116/article/details/89242703):
在这里插入图片描述
最终执行结果为My_family中main()的函数。
综上所述:导入包的实质为执行init.py文件。
(二)在python程序中导入一个包时,python会根据sys.path中的目录来寻找包中包含的子目录
(1)在package_import里面families文件,同样按照上面的同级目录方法import,发现提示没有这个模块。
在这里插入图片描述
原因:进行查找时路径搜索中就没module_import的目录
在这里插入图片描述
(2)解决办法
利用OS模块的内置方法找到导入包的父级目录,之后插入sys.path的列表中即可(由于路径搜索是按照sys.path的list的先后顺序进行查找,未避免有相同名称的模块,将搜索路径插入到list的第一位)。
在这里插入图片描述
由此可见,写入路径后,不同包之间可进行相应的访问了。

四、包导入
第一步:在要导入的包中init文件(例子中的module_import),导入所用的各个功能模块(方法参照模块导入文章)
第二步:在使用导入包的文件中导入并进行相应操作(例子中的package_import的families.py),导入及访问如下所示:
在这里插入图片描述
说明导入子模块时,必须使用全名进行访问;
五、包导入实例
接下来举的例子,我们均使用package_import子包下面的families.py调用module_import子包,module_import子包中init文件内容如下:
在这里插入图片描述
(一)导入到子包
在这里插入图片描述
(二)import到模块
在这里插入图片描述
(三)导入到函数(变量)
在这里插入图片描述
六、包的好处:
(1)包采用“点模块名”的形式,可以避免名字冲突,(不用担心不同模块之间的全局变量的影响,不用担心不同库之间模块重名的问题);
(2)便于程序的维护管理。

猜你喜欢

转载自blog.csdn.net/qq_44801116/article/details/105399368