研究python解释器(1)-python名字空间

最近看了《python源码剖析》,把印象深刻的点写下来。自己的体会:只有深入源码,才能理解python中某些概念的本质。

关于python作用域:

文本作用域,编译器都是通过换行来区分的,比如模块对象,类对象,函数对象,它们都对应着一个代码对象。这个代码对象有它维护的环境。

关于赋值:

什么是赋值,其实就是把一个变量和一个对象绑定起来。在python中,变量只是一个名字而已。它可以随意和一个对象绑定起来。所以python中,不光=号,import, as, def class,这些背后都是赋值。本质都是把一个变量和一个对象绑定,对象可以是一个函数体,可以是一个常量。

python虚拟机运行的原理

每个作用域对应一个代码对象,这个对象里有虚拟机代码要用到的常量,变量。还有“机器”代码本身。虚拟机每调用一次函数,就要把代码对象压入虚拟机的栈中。每个代码对象就是一个栈帧,每个栈帧都有自己的作用域。当运行到最里面的函数时,碰到return返回数据,数据从当前栈帧的数据栈中弹出,同时当前栈帧从虚拟机中弹出。当前环境变成下面一个栈帧。并且把return的值传给当前栈帧的一个变量。然后用这个变量代入当前栈帧的代码对象去运算。如果有返回值,继续弹出。这样直到__main__函数。

背后的思想:虚拟机其实要解决哪些问题呢?首先是管理作用域的问题。如果用python来写,可以用对象来管理每个栈帧。每个对象都可以维护自己的数据变量。而用C语言实现的话,就要借用结构体。还有就是栈这种数据结构。在python中没有专门的栈这种数据模型,强以通过列表实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值