python动态加载机制

python动态加载机制
01.python中所有的模块加载到内存后,都会放在sys.modules中
import一个模块时,先去sys.modules中查找是否已经加载过这个模块,
是,将这个模块的名字加入到正在调用import的local命名空间中;
否,从sys.path中按照模块名查找,找到后加载到内存,并加入sys.modules中
(如果要让Python能找到自己写的一些模块,有时需要在sys.path中加入自己模块的路径)

一个模块不会被重复加载
import并不完全等同于我们所熟知的“动态加载”的概念;
python先在全局的sys.modules(保存了module的唯一映像)中查找,
如果存在,引入一个符号到该.py的名字空间,并将其关联到该module,使这个module透过这个符号能够被.py文件感知;
否则执行动态加载

sys.path组成
(导入模块时,不带模块后缀名)
01.程序主目录
02.PYTHON目录
03.标准连接库目录(local/lib/python)
04.任何.pth内容 /新功能,允许用户把有效果的目录添加到模块搜索路径中去

module是管理class机制,package是管理module机制
class<module<package 多个module,package最终组成一个树形结构

Python对x.y.z的import 操作实际上是沿者树状结构一层一层地展开来的,可以看作是对树状结构的遍历操作。
我们可以将x.y.z看做是一个二叉树的遍历的轨迹,其中在遍历的过程中,我们只访问其右子树

可以将所有的import动作都归一到同一个抽象原则下:
当Python虚拟机import module 或者package时候,都会创建一个module对象,并且设置其__name__和__path__。
Python中的import动作都是发生在某个package环境中的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值