研究python解释器(3)-杂记

前后历时近一个月,终于把python解释器研究了一遍,深感“事有本末,物有终始,知所先后则近道矣”。有些知识是源头的,一旦打通,近乎神功。最后把平时的笔记列于下。

  • 名字空间:一个名字能够施加影响的程序正文区域,便是该名字的 作用域。在 Python 中,变量只是一个与实际对象绑定起来的名字,变量定义本质上就是建立名字与对象的约束关系。模块的 属性空间 以及 全局名字空间 是同一个东西,都藏身于同一个 dict 对象。
  • 全局名字空间:在 Python 中,一个对象可以访问哪些属性,称为对象的 属性空间 。由于属性也是键值对,因此一般也是用 dict 来存储。通过观察以上代码行为,我们得到一个结论:模块的 属性空间 以及 全局名字空间 是同一个东西,都藏身于同一个 dict 对象。那么,我们怎么找到这个特殊的 dict对象呢?答案是:全局名字空间藏身于模块对象背后的 dict 对象中。
  • 模块导入:(1)Python 加载模块前,先检查 sys.modules ;如果发现目标模块已经加载过,则直接将其返回。因此,一个模块不管被多少 import 语句导入,第一次加载后便不再重复加载了。想要加载被导入模块,Python 需要找到模块代码的具体位置,这便是 Python 模块搜索 过程。Python 在内部维护了一个模块搜索路径的列表,同样位于 sys 模块内。(2)import中,有计算机设计的思想:比如用空间解决时间,维护一个sys.modules,可以加快访问速度,不需要去查找。还有编译过的文件存入到pyc,不用每次都重新编译,这是把耗时间操作提前的设计思想。python解释器中,按照继承类向上查找的过程,也用到这种思想。通过一个有向图来向上查找继承类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值