python 模块包

'''
模块包
python代码的目录就被成为包
包导入是吧计算机上的目录变成python的命名空间
包导入最左边的部分仍然是sys.path模块搜索路径列表中的一个目录

__init__.py包文件
包导入语句的路径中的每个目录内都必须有__init__.py文件,否则导入包会失败
d:/a/b/c/d.py
d:/a加入到sys.path中
import b.c.d导入d.py
则a目录中不需要__init__.py包文件,b,c目录中要有__init__.py包文件

__init__.py可以包含python程序代码,也可以完全是空的
2. 模块命名空间的初始化
3. from * 语句的行为:可以在__init__.py文件内使用__all__列表来定义目录已from *语句形式导入时,需要导出什么,
在__init__.py文件中,__all__列表是指当包名称使用from *导入时,应该导入的子模块的名称清单
如果没有设定__all__列表,from *语句不会自动加载嵌套在该目录中的子模块,只加载__init__.py文件中赋值语句定义的变量名,包括该文件中程序代码明确导入的任何子模块
'''

#包初始化:首次导入某个目录时,会自动从左到右执行导入的目录下的__init__.py文件中的代码,非首次导入不执行,reload重载只执行最后边目录的__init__.py文件中的代码
#d:dir0/dir1/dir2/mod.py文件, dir0,dir1,dir2目录下都有__init__文件
import sys
sys.path.append('d:/dir0')
print(sys.path)

import dir1.dir2.mod   #dir1 init,dir2 init, mod只会执行dir1和dir2目录下的__init__文件和mod文件
import dir1.dir2.mod   #不会再次执行__init__
from imp import reload
reload(dir1)    #dir1 init
reload(dir1.dir2)   #dir2 init
reload(dir1.dir2.mod)   #mod
print(dir1)
print(dir1.dir2)

print(dir1.dir2.mod)

当前是目录A/B
from . import D   导入A.B.D
from .. import D   导入A.D
from .D import E   导入A.B.D.E
from ..D import E   导入A.D.E

相对导入适用于只在包内导入
相对导入只是用于from语句


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值