`
jinvasshole
  • 浏览: 803544 次
文章分类
社区版块
存档分类
最新评论

【Python旧时笔记 九】Python虚拟机如何执行“i = 1”

 
阅读更多
首先写一个demo.py,里面只有一句:
i = 1
接着写一个test.py,内容如下:
import dis

source = open('./demo.py').read()
co = compile(source, './demo.py', 'exec')

dis.dis(co)
输出:
1 0 LOAD_CONST 0 (1)
3 STORE_NAME 0 (i)
6 LOAD_CONST 1 (None)
9 RETURN_VALUE
利用Python库提供的dis工具,可以对其反汇编,得到如上结果(开头的1表示对应的源码行号)。
所以,对于i = 1这样的语句,Python的虚拟机是一步一步执行上述指令的。

PyEval_EvalFrameEx是通过switch/case语句来执行指令的,对应的LOAD_CONST代码如下:
caseLOAD_CONST:
x=GETITEM(consts,oparg);
Py_INCREF(x);
PUSH(x);
gotofast_next_opcode;
consts是指PyCodeObject中的常量:consts=co->co_consts;
首先是从consts常量元组中获取元素,oparg为0,即获取((PyTupleObject*)op) ->ob_item[i];
接着增加引用计数。
然后将其压栈:
#defineBASIC_PUSH(v) (*stack_pointer++ = (v))
#definePUSH(v) { (void)(BASIC_PUSH(v), \
……
这里的stack_pointer是帧(活动记录)对应的栈指针:stack_pointer=f->f_stacktop;
所以执行到这里,就是从consts变量元组中取出第0个元素(值为1),将其push到当前活动记录对应的栈中。

接下来是LOAD_VALUE:
caseSTORE_NAME:
w=GETITEM(names,oparg);
v=POP();
if((x=f->f_locals) !=NULL) {
if(PyDict_CheckExact(x))
err=PyDict_SetItem(x,w,v);
else
err=PyObject_SetItem(x,w,v);
Py_DECREF(v);
if(err== 0)continue;
break;
}
PyErr_Format(PyExc_SystemError,
"no locals found when storing %s",
PyObject_REPR(w));
break;
首先从names中取出第0个元素,即i;
接着进行出栈操作,把刚才进展的1给POP出来;
最后把键值对(key - value)保存到局部符号表中:f->f_locals。

最后两句是返回语句。

JasonLee 2011.08.21 15:08
分享到:
评论

相关推荐

    python核心笔记.pdf

    【Python核心笔记】深入浅出地探讨了Python这一强大且多用途的编程语言。Python以其简单易用且功能强大的特性,赢得了广大开发者的喜爱。它是一种解释型的高级编程语言,支持面向对象编程,同时也具备过程化编程的...

    使用python创建OpenStack虚拟机

    手把手教您如何使用python语言,创建OpenStack虚拟机。

    Python学习笔记(干货) 中文PDF完整版.pdf

    《Python学习笔记(干货) 中文PDF完整版.pdf》是一份全面且深入的Python学习资源,旨在帮助初学者和有经验的程序员进一步提升Python技能。这份资料覆盖了Python的多个核心概念,包括环境搭建、基本语法、数据类型、...

    马哥python课堂笔记-马哥教育PYTHON相关基础笔记.pdf

    在马哥教育的PYTHON相关基础笔记中,我们看到几个关键知识点: 1. **推荐书籍**:学习Python时,有几本经典教材值得参考,包括《Python Cookbook》、《Learn Python the Hard Way》、《Google's Python Class》以及...

    python学习笔记1-(廖雪峰教程,菜鸟教程)python基础.pdf

    以上就是Python学习笔记1中的主要内容,这些基础知识构成了Python编程的基础,是学习更高级特性和应用的基础。对于初学者来说,熟练掌握这些内容是非常重要的。在后续的学习中,还会涉及到函数、模块、面向对象编程...

    小甲鱼python教程笔记

    小甲鱼 Python 教程笔记 本教程笔记涵盖了 Python 的基础知识点,包括变量、字符串、列表、元组、布尔类型、逻辑运算符、循环结构、列表访问、成员资格运算符、is 运算符、引用和拷贝、列表推导式、元组的使用、...

    python学习笔记.pdf

    在这份《python学习笔记.pdf》中,记录了Python编程的基础知识和一些技巧,内容涵盖了字符串处理、变量操作、数据结构、循环、条件判断等方面。以下是对学习笔记中提到知识点的详细说明。 ### 字符串处理 在Python...

    千峰python课件笔记+源码 (凯哥)

    千锋python基础教程:1、第一个python程序与数据存储 '千锋python基础教程:2、print&input;与变量和运算符' 千锋python基础教程:3、字符串与循环中的while '千锋python基础教程:4、布尔&list;与条件循环语句与...

    Python 学习笔记 第二版.pdf

    - **执行**:Python程序的执行过程涉及到多个阶段,首先是词法分析和语法分析,之后是编译成字节码,最后由Python虚拟机执行字节码。 #### 二、内置类型详解 - **数字**:包括整数(int)和浮点数(float),以及复数...

    皮大庆Python学习笔记

    Python基础入门教程,适合Python初学者,文档内容包括, 目录 前言 i 第一章 程序 1 1.1 程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 什么是调试 . . . . . . . . . . . . . . . ....

    Python学习笔记.pdf

    ### Python学习笔记知识点详解 #### 一、Python简介与特性 **标题与描述解析:** "Python学习笔记.pdf" 的标题直接指出了文档的主题——Python的学习资料,而描述的重复表明该文档的主要内容即为Python的学习笔记...

    python的毕业设计云笔记平台分析与设计.zip

    python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台...

    疯狂Python讲义笔记 Python基础入门到进阶知识手册 对照原文的笔记 由浅入深 循序渐进的笔记 共197页.pdf

    《疯狂Python讲义笔记》是一本详尽的Python学习指南,涵盖了从基础到进阶的知识点,适合初学者和有一定经验的开发者。笔记内容丰富,包括变量和简单类型、列表、元组和字典、函数和lambda表达式、类和对象、异常处理...

    Python学习笔记(强烈推荐)

    由皮大庆编写的《Python学习笔记(强烈推荐)》以其丰富的内容、清晰的逻辑和实用的示例,成为了Python初学者的首选入门资料。在这份详尽的学习笔记中,作者从基础概念出发,逐步引导读者深入理解Python编程语言的核心...

    菜鸟的Python笔记

    Python是解释型语言,程序在运行前需要先将源代码编译成字节码,然后由Python虚拟机(PVM)执行这些字节码。此外,Python可以跨平台运行,包括在Windows和Linux系统上。Python还可以与其他语言集成,例如与C/C++的...

    python入门笔记(推荐)

    这篇“Python入门笔记”旨在帮助初学者快速掌握Python的基础知识,通过实践操作来加深理解。 首先,Python的语法特点是它的一大亮点。Python代码强调可读性,遵循“缩进决定代码块”的原则,避免了大括号带来的视觉...

    python入门笔记(强烈推荐).pdf

    python刚刚开始学习还没入门的,可以试一下这些例题,掌握快速

    疯狂Python讲义笔记.pdf

    疯狂Python讲义笔记是根据李刚大师所著的《疯狂Python讲义》所作的学习笔记,内容涵盖了Python基础语法、高级特性以及实际应用。本笔记详细记录了Python的学习要点,包括变量和简单类型、数据结构、函数和类、异常...

    python爱心代码-03-虚拟机软件.ev4.rar

    标题中的“python爱心代码-03-虚拟机软件.ev4.rar”表明这是一个关于Python编程的教程,特别是与虚拟机软件相关的部分。这个压缩包可能包含了第3部分的视频教程,文件名为“python爱心代码-03-虚拟机软件.ev4.mp4”...

Global site tag (gtag.js) - Google Analytics