首先写一个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核心笔记】深入浅出地探讨了Python这一强大且多用途的编程语言。Python以其简单易用且功能强大的特性,赢得了广大开发者的喜爱。它是一种解释型的高级编程语言,支持面向对象编程,同时也具备过程化编程的...
手把手教您如何使用python语言,创建OpenStack虚拟机。
《Python学习笔记(干货) 中文PDF完整版.pdf》是一份全面且深入的Python学习资源,旨在帮助初学者和有经验的程序员进一步提升Python技能。这份资料覆盖了Python的多个核心概念,包括环境搭建、基本语法、数据类型、...
在马哥教育的PYTHON相关基础笔记中,我们看到几个关键知识点: 1. **推荐书籍**:学习Python时,有几本经典教材值得参考,包括《Python Cookbook》、《Learn Python the Hard Way》、《Google's Python Class》以及...
以上就是Python学习笔记1中的主要内容,这些基础知识构成了Python编程的基础,是学习更高级特性和应用的基础。对于初学者来说,熟练掌握这些内容是非常重要的。在后续的学习中,还会涉及到函数、模块、面向对象编程...
小甲鱼 Python 教程笔记 本教程笔记涵盖了 Python 的基础知识点,包括变量、字符串、列表、元组、布尔类型、逻辑运算符、循环结构、列表访问、成员资格运算符、is 运算符、引用和拷贝、列表推导式、元组的使用、...
在这份《python学习笔记.pdf》中,记录了Python编程的基础知识和一些技巧,内容涵盖了字符串处理、变量操作、数据结构、循环、条件判断等方面。以下是对学习笔记中提到知识点的详细说明。 ### 字符串处理 在Python...
千锋python基础教程:1、第一个python程序与数据存储 '千锋python基础教程:2、print&input;与变量和运算符' 千锋python基础教程:3、字符串与循环中的while '千锋python基础教程:4、布尔&list;与条件循环语句与...
- **执行**:Python程序的执行过程涉及到多个阶段,首先是词法分析和语法分析,之后是编译成字节码,最后由Python虚拟机执行字节码。 #### 二、内置类型详解 - **数字**:包括整数(int)和浮点数(float),以及复数...
Python基础入门教程,适合Python初学者,文档内容包括, 目录 前言 i 第一章 程序 1 1.1 程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 什么是调试 . . . . . . . . . . . . . . . ....
### Python学习笔记知识点详解 #### 一、Python简介与特性 **标题与描述解析:** "Python学习笔记.pdf" 的标题直接指出了文档的主题——Python的学习资料,而描述的重复表明该文档的主要内容即为Python的学习笔记...
python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台...
《疯狂Python讲义笔记》是一本详尽的Python学习指南,涵盖了从基础到进阶的知识点,适合初学者和有一定经验的开发者。笔记内容丰富,包括变量和简单类型、列表、元组和字典、函数和lambda表达式、类和对象、异常处理...
由皮大庆编写的《Python学习笔记(强烈推荐)》以其丰富的内容、清晰的逻辑和实用的示例,成为了Python初学者的首选入门资料。在这份详尽的学习笔记中,作者从基础概念出发,逐步引导读者深入理解Python编程语言的核心...
Python是解释型语言,程序在运行前需要先将源代码编译成字节码,然后由Python虚拟机(PVM)执行这些字节码。此外,Python可以跨平台运行,包括在Windows和Linux系统上。Python还可以与其他语言集成,例如与C/C++的...
这篇“Python入门笔记”旨在帮助初学者快速掌握Python的基础知识,通过实践操作来加深理解。 首先,Python的语法特点是它的一大亮点。Python代码强调可读性,遵循“缩进决定代码块”的原则,避免了大括号带来的视觉...
python刚刚开始学习还没入门的,可以试一下这些例题,掌握快速
疯狂Python讲义笔记是根据李刚大师所著的《疯狂Python讲义》所作的学习笔记,内容涵盖了Python基础语法、高级特性以及实际应用。本笔记详细记录了Python的学习要点,包括变量和简单类型、数据结构、函数和类、异常...
标题中的“python爱心代码-03-虚拟机软件.ev4.rar”表明这是一个关于Python编程的教程,特别是与虚拟机软件相关的部分。这个压缩包可能包含了第3部分的视频教程,文件名为“python爱心代码-03-虚拟机软件.ev4.mp4”...