使用模块可以避免函数名和变量名重名引发的冲突,那么,如果模块名重复应该再怎么办?在Python中,提供了包的概念,宝石一个分层次的目录结构,他将一组功能相近的模块组织在一个目录下。这样,既可以起到规范代码的作用,又能避免模块名重名引起的冲突。
注:包简单理解就是文件夹,只不过在该文件夹下必须存在一个名为 __init__.py的文件。
1.Python程序结构的目录
在实际项目开发时,通常情况下,会创建多个包用于存放不同类型的文件。例如:开发一个网站时,可以创建如下的包结构:
Shop——————项目名
admin————用于保存后台文件的包
__init__.py
forms.py
views.py
home————用于保存前台文件的包
__init__.py
forms.py
views.py
templates————用于保存模板文件的包
__init__.py
models.py
manage.py————入口程序
注:在上面的目录结构中,先创建一个名称为shop的项目,然后再该包下又创建了adminhome和templates3个包和一个manage.py的文件,最后在每个包中,又创建相应的模块。
2.创建和使用包
2.1创建包
创建包实际上就是创建一个文件夹,并且在该文件夹中创建一个名称为__init__.py的Python文件,在__init__.py文件中,可以不编写任何代码,也可以编写一些Python代码,在__init__.py文件中所编写的代码,在导入包时会自动执行。
注:__init__.py文件是一个模块文件,模块名为对应的包名,例如,在setting包中创建的__init__.py文件,对应的模块名为setting。
2.2使用包
创建包以后,就可以在包中创建相应的模块,然后再使用import语句从包中加载模块,从包中加载模块通常有以下的几种方式:
1.通过 import +完整包名+模块名 的形式加载指定模块
例如:
import settings.size
通过该方式导入模块后,在使用时需要使用完整的名称,例如 在已经创建的 settings包中创建一个名称为size的模块,并且在该模块中定义两个变量,代码如下
width=800
height=600
这时,通过上面的这种方式导入size模块后,在调用width和height变量时,就需要在变量名前加入settings.size前缀,对应的代码如下:
import settings.size if __name__="main": print("宽度:",settings.size.width) print("高度:",settings.size.height)
2.通过 from+完整包名 + import + 模块名 形式加载指定 模块
例如:
from settings import size
通过该方式导入模块后,在使用时不需要带包前缀,但是需要带模块名,例如:
from settings import size if __name__="main": print("宽度:",size.width) print("高度:",size.height)
3.通过 from+完整包名+模块名+import+定义名 形式加载指定模块
例如:
from settings.size import width,height
通过该方式导入模块的函数名、变量名或者类后,在使用时直接使用函数、变量名或者类名即可。
from settings.size import width,height if __name__="main": print("宽度:",width) print("高度:",height)
注:在通过 from+完整包名+模块名+import+定义名 的形式加载模块时,可以使用 * 号代替定义名,表示加载该模块下的全部定义。
花絮:
本期的Python 模块就分享到这里,下期我们将继续分享Python模块的相关知识,感兴趣的朋友可以关注我。
同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。