首页 > 语言 > 关键词   >  Python程序最新资讯  > 正文

Python程序的执行原理(1)

2013-09-17 13:59 · 稿源:tech.uc.cn

test.py的指令序列

func函数的指令序列

首先列表示以下几个指令在py文件中的行号;

第二列是该指令在指令序列co_code里的偏移量;

第三列是指令opcode的名称,分为有操作数和无操作数两种,opcode在指令序列中是一个字节的整数;

第四列是操作数oparg,在指令序列中占两个字节,基本都是co_consts或者co_names的下标;

第五列带括号的是操作数说明。

7. 执行字节码

Python虚拟机的原理就是模拟可执行程序再X86机器上的运行,X86的运行时栈帧如下图:

假如test.py用C语言来实现,会是下面这个样子:

  1. const char *s = “hello”; 
  2.  
  3. void func() { 
  4.     printf(“%s\n”, s); 
  5.  
  6. int main() { 
  7.     func(); 
  8.     return 0; 

Python虚拟机的原理就是模拟上述行为。当发生函数调用时,创建新的栈帧,对应Python的实现就是PyFrameObject对象。

7.1 PyFrameObject

  1. typedef struct _frame { 
  2.     PyObject_VAR_HEAD 
  3.     struct _frame *f_back;    /* 调用者的帧 */ 
  4.     PyCodeObject *f_code;     /* 帧对应的字节码对象 */ 
  5.     PyObject *f_builtins;     /* 内置名字空间 */ 
  6.     PyObject *f_globals;      /* 全局名字空间 */ 
  7.     PyObject *f_locals;       /* 本地名字空间 */ 
  8.     PyObject **f_valuestack;  /* 运行时栈底 */ 
  9.     PyObject **f_stacktop;    /* 运行时栈顶 */ 
  10.     ……. 

那么对应Python的运行时栈就是这样子:

7.2 执行指令

执行test.py的字节码时,会先创建一个栈帧,以下用f表示当前栈帧,执行过程注释如下:

test.py的符号名集合和常量集合

  1. co.co_names   (‘s’, ’func’) 
  2. co.co_consts  (‘hello’, <code object func at 0x2aaeeec57110, file ”test.py”, line 3>, None) 

test.py的指令序列

上面的CALL_FUNCTION指令执行时,会创建新的栈帧,并执行func的字节码指令,以下用f表示当前栈帧,func的字节码执行过程如下:

func函数的符号名集合和常量集合

  1. func.co_names       (‘s’,) 
  2. func.co_consts      (None,)

func函数的指令序列

7.3 查看栈帧

如果你想查看当前栈帧,Python提供了sys._getframe()方法可以获取当前栈帧,你只需要在代码里加入代码如下:

  1. def func(): 
  2.     import sys 
  3.     frame = sys._getframe() 
  4.     print frame.f_locals 
  5.     print frame.f_globals 
  6.     print frame.f_back.f_locals 
  7.     #你可以打印frame的各个域 
  8.     print s   

原文链接:https://tech.uc.cn/?p=1932

举报

  • 相关推荐
  • 大家在看
  • Nothing Phone 3发布:最具个性的骁龙8系手机 5700元起

    Nothing正式发布新一代旗舰Nothing Phone 3,起售价是799美元(12GB 256GB,约合人民币5700元)。 作为新一代旗舰,Nothing Phone 3最大的变化是外观设计,正面是一块6.67英寸AMOLED屏幕,分辨率为FHD ,刷新率为120Hz,峰值亮度为4500尼特,支持2160Hz高频PWM调光,前置5000万像素摄像头。 背部右上角嵌入了一块副屏,官方称之为Glyph Matrix”,这是一块单色LED屏幕,由由489颗独立发光的LED灯组�

  • Mistplay发布iPhone版手游忠诚度应用及LoyaltyPlay变现方案

    2025年7月15日,全球手游忠诚度应用Mistplay在成立十周年之际推出两款新产品:iPhone版应用和变现方案LoyaltyPlay。Mistplay通过"玩赚"模式连接玩家与发行商,安卓版已覆盖全球九大市场,拥有数百万活跃用户。新产品将为中国开发者提供全新获客渠道和变现途径,同时通过AI引擎"Helios"和实时运营系统提升用户体验。公司持续投资亚太市场,帮助本地开发者拓展全球业务。iPhone版已上线美加应用商店,未来将扩展至更多地区。

  • 8K+份额TOP1,海尔麦浪冰箱又要上新,谁要坐不住了?​

    海尔麦浪冰箱以3个月迭代一次的速度刷新行业纪录,搭载"磁控全空间保鲜科技"解决食材营养流失痛点。该技术通过恒定磁场控制水分子运动,使冻鱼保鲜60天仍如刚捕捞般新鲜,获国家科学进步奖等权威认证。产品采用"用户共创"模式,前三次迭代分别推出暖色调设计、制冰功能和智能交互功能。新品上市半年销量突破40万台,618期间稳居8K+市场榜首。行业专家指出,这款产品不仅颠覆传统保鲜技术,更可能重塑高端冰箱市场格局。

  • 曝折叠屏iPhone已进入P1原型阶段:明年上市

    据供应链消息,折叠屏iPhone于6月份进入P1(Prototype 1)原型开发阶段,预计2025年底走完P1-P3整个开发流程。 然后再进入EVT(Engineering Verification Test)阶段,该阶段是工程样品验证测试,主要测试项目包括基本的功能测试、参数测量和一些规范验证,主要目标是确保能满足苹果设计要求和规范。 在P1到P3阶段,供应链会进行小量试产,再交由iPhone主力组装厂鸿海、和硕进行组装�

  • 折叠iPhone已进入P1原型开发阶段:2026年见

    苹果公司正在推进可折叠iPhone的研发进程,预计这款创新产品将在2026年下半年正式亮相。 据海外媒体报道,苹果的折叠iPhone项目已于6月进入P1原型开发阶段,随后还将经历P2和P3阶段,预计2025年底完成整个原型开发流程。 根据天风国际分析师郭明錤透露,鸿海精密将在2025年第三或第四季度开始生产这款折叠屏幕iPhone,尽管关键的转轴部分尚未最终确定,但屏幕规格已定,将

  • 苹果激进!折叠屏iPhone 0折痕

    分析师郭明錤发文表示,为了确保能在2026年下半年量产折叠屏iPhone,苹果最终决定采用三星提供的无折痕面板,放弃自家方案,同时供应商Fine M-Tec也将从中受益。 郭明錤指出,铰链是实现无折痕的关键部件之一,折叠屏手机产生折痕的主要原因在于,屏幕反复弯折造成应力集中,使材料产生永久形变,金属板能分散弯折产生的应力,降低材料超出弹性限度的风险,进而减少�

  • iPhone 17处理器成谜:连分析师都懵了

    根据爆料的消息,iPhone 17系列共有4款机型,分别是iPhone 17、iPhone 17 Air、iPhone 17 Pro和iPhone 17 Pro Max,这次苹果砍掉了Plus机型,取而代之的是Air机型。 其中iPhone 17 Pro系列搭载A19 Pro芯片,iPhone 17 Air预计搭载A19芯片,但是iPhone 17标准版的处理器依然是个谜。 分析师Jeff Pu在最新发布的投资者报告中称,iPhone 17标准版搭载A19芯片,在此之前,Jeff Pu预测iPhone 17标准版搭载A18芯片,这�

  • AI日报:阿里通义开源音频生成模型ThinkSound;谷歌Veo3支态图片生成视频;昆仑万维发布 Skywork-R1V 3.0

    【AI日报】今日AI领域重要动态:1)阿里开源支持链式推理的音频生成模型ThinkSound,实现高保真空间音频生成;2)谷歌Veo3升级,支持静态图片生成生动视频;3)Hugging Face发布30亿参数小模型SmolLM3,性能优于Llama-3.2-3B;4)阿里开源网络智能体WebSailor,展现强大推理和检索能力;5)Moonvalley发布原生1080P视频生成模型Marey Realism v1.5;6)Vidu Q1支持最多七张参考图像生成一致性视频;7)苹果�

  • iPhone 17 Pro/Pro Max大曝光:比16 Pro多了一款配色

    随着iPhone 17系列发布时间的临近,有关这款新品的细节陆续被曝光。 最新爆料显示,iPhone 17 Pro、iPhone 17 Pro Max共有5款配色,比iPhone 16 Pro系列多了一款。 具体来说,iPhone 17 Pro系列提供黑色、灰色、银色、深蓝色和橙色五种配色,而iPhone 16 Pro系列提供沙漠色、原色、白色和黑色,从爆料来看,iPhone 17 Pro系列配色中最具辨识度的是深蓝色。

  • 技嘉科技 STEALTH Revolution 玩转简约装机美学 力邀创作者打造纯白梦幻桌机

    技嘉科技推出STEALTH Revolution活动,主打纯白美学装机概念。活动以X870AORUS STEALTH ICE主板为核心,邀请全球创作者打造个性化桌机。该系列采用背插式设计,简化装机流程,释放机箱空间,便于展示水冷设备和RGB灯效。新品涵盖X870/B850主板、RTX5090显卡及全景机箱等,联合10余家机箱品牌推出20余款兼容产品。活动提供限量主板供参赛者使用,并开放大众投票评选优秀作品,参与者有机会赢取丰厚奖品。技嘉旨在推动"背插主板×纯白机身"的装机新潮流,满足市场对简约风格的需求。

这篇文章对你有价值吗?

今日大家都在搜的词: