包导入基础知识
# -*- coding: utf-8 -*- #python 27 #xiaodeng #包导入基础知识 #注意: #除了模块名之外,导入也可以指定目录路径。python代码的目录就称为包,因此这类导入就称之为包导入。 #实际上,包导入时把计算机上的目录变成另一个python命名空间,而属性则对应于目录中所包含的子目录和模块文件。 #这是高级特征,他提供了层次,对于组织大型系统内的文件很方便。而且可以简化模块搜索路径的设置。 #包导入的运作机制: #在import语句中列举简单文件名的地方,可以改成列出路径的名称,彼此以点号相隔。 #需要有__init__语句 import dir1.dir2.mod #主要要是python所能搜索到的路径才行。 #dir1:表明机器上有一个dir1目录 #dir2:表明dir1内部包含dir2目录 #mod:dir2目录下有一个mod.py文件 #__init__包文件 #如果选择使用包导入,就必须多遵循一条约束:包导入语句的路径中的每个目录内都必须有__init__.py文件。【注意是每个目录】 #如上例子,在dir1和dir2目录下面都必须包含__init__.py文件。 #容器目录dir() 也就是顶层目录不需要这类文件,因此其本身没有列在import语句之中。 #__init__.py文件需要遵循的规则: #dir1和dir2都必须包含一个__init__.py文件 #dir()是容器,不需要__init__.py文件,即便是有,这个文件也会被忽视。其语言本身做了处理 #dir()必须列在模块搜索路径上(即:此目录必须是主目录,或者列在pythonpath之中) #结构基本说明: dir()\ dir1\ __init__.py dir2\ __init__.py mod.py #__init__.py本身扮演了包初始化的钩子,替目录产生模块命名空间及使用目录导入时实现from行为的角色 #包初始化: #python导入某个目录时,会自动执行该目录下__init__.py文件中的所有程序代码。因此,这类文件自然就是 #放置包内文件所需要初始化的代码的场所。 #模块命名空间的初始化 #在包导入的模型中,脚本内的目录路径,在导入后会变成真实的嵌套对象路径。 #from*语句的行为 #作为一个高级功能,可以在__init__.py文件内使用__all__列表来定义目录以from*语句形式导入。 #__all__,上面会列出应该导入的子模块的名称清单。
无语言基础,自学python所做的各种笔记,欢迎大牛指点.