洗礼灵魂,修炼python(49)--巩固篇—包
包(Package)
这个其实前面也说过的,不过同模块一样,没有具体的解析
1.什么是包
在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,那么此文件夹(目录)即为包,文件夹(目录)名即为包名,但包有一个特征与其他普通文件夹区分,包目录下必须有一个名为__init__.py的文件,__init__.py的内容可以为空,主要是为了避免python将文件夹名当作其他文件夹一样的处理为普通的字符串。一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,表示导入全部定义过的模块。
2.有哪些包
查看包的命令和查看模块的命令是一样的,不再赘述
3.作用
用于将一组模块归类到同一个目录中,整理某些功能相近的文件组织在一起,在实际的开发中,可能因为代码的不断增加,我们需要维护代码的可利用和可原理性,需要将带有不同功能的或者相同功能的模块归类在一起,这其实和模块一个道理,模块管理的是代码,而包管理的是模块
4.怎么自定义包
1)手动建一个文件夹
2)在文件夹下建立__init__.py文件
3)再在同一文件夹下建立你自己的模块
然后就可以导入使用了
5.怎么使用包
使用包的方式跟模块也类似,使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 __init__.py,假如子目录中也有 __init__.py 那么它就是这个包的子包了。
例:使用上面例子的已经建好的自定义包test里的方法:
使用from XX import XX 方法也一样,注意导入包和导入模块细微的区别就行,比如像这样就会报错:
使用from XX import XX时, 后面只能跟一个方法,不能跟模块名.方法,必须这样才行:
注意:导入操作时,默认只在父路径下(即包的路径)的模块内搜索导入。
如果需要导入一个其他包的模块,则需要先导入sys模块,添加一个搜索路径即可:
例:
其中,sys.path就是python默认的模块搜索路径,注意导入的包根目录下必须带有__init__.py文件
6.包和类,模块的区别
- 类:类的概念在许多语言中出现,很容易理解。它将数据和操作进行封装,以便将来的复用
- 模块:在Python可理解为对应于一个py文件。在创建了一个py文件后,定义了某些函数和变量
- 包:包含有模块和一个特殊的__init__.py文件的文件夹或者目录
在某些特定情况下,可以把包看作一个模块,把模块看作一个包