执行 python demo.py 后,将会启动 Python 的解释器,然后将 demo.py 编译成一个字节码对象 PyCodeObject。

在 Python 的世界中,一切都是对象,函数也是对象,类型也是对象,类也是对象(类属于自定义的类型,在 Python 2.2 之前,int, dict 这些内置类型与类是存在不同的,在之后才统一起来,全部继承自 object),甚至连编译出来的字节码也是对象,.pyc 文件是字节码对象(PyCodeObject)在硬盘上的表现形式。

所以,在运行期间,编译结果也就是 PyCodeObject 对象,只会存在于内存中,而当这个模块的 Python 代码执行完后,就会将编译结果保存到了 pyc 文件中,这样下次就不用编译,直接加载到内存中。pyc 文件只是 PyCodeObject 对象在硬盘上的表现形式。

Python 标准库提供了用来生成代码对应字节码的工具 dis。dis 提供一个名为 dis 的方法,这个方法接收一个 code 对象,然后会输出 code 对象里的字节码指令信息。

s = open('demo.py').read()

co = compile(s, 'demo.py', 'exec')

import dis

dis.dis(co)

demo.py 被编译后,接下来的工作就交由 Python 虚拟机来执行字节码指令了。Python 虚拟机会从编译得到的 PyCodeObject 对象中依次读入每一条字节码指令,并在当前的上下文环境中执行这条字节码指令。我们的程序就是通过这样循环往复的过程才得以执行。

简述python程序的运行原理_谈谈 Python 程序的运行原理相关推荐

  1. python程序运行原理_谈谈 Python 程序的运行原理

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,谈谈 Python 程序的运行原理 这篇文章准确说是『Python 源码剖析』的 ...

  2. python元类是什么_谈谈Python中元类Metaclass(一):什么是元类

    简单的讲,元类创建了Python中所有的对象. 我们说Python是一种动态语言,而动态语言和静态语言最大的不同,就是函数和类不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个HelloW ...

  3. python验证码 识别代码不准_谈谈Python进行验证码识别的一些想法

    用python加"验证码"为关键词在baidu里搜一下,可以找到很多关于验证码识别的文章.我大体看了一下,主要方法有几类:一类是通过对图片进行处理,然后利用字库特征匹配的方法,一类 ...

  4. 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发

    微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  5. python 打包 无需安装运行环境_无需Python环境,小白也可以运行的抢票程序

    阅读文本大概需要 5 分钟. 又到周末了,pk 哥抽空对抢票程序作了优化,并把优化后的程序做打包处理,打包后没有 Python 环境的电脑也可以正常运行程序了.前两篇关于抢票的文章没看可点下方链接查看 ...

  6. python程序写完后点哪个运行快_让 Python 代码运行更快的最佳方式!

    PyPy与CPython PyPy是Python解释器CPython的直接替代品.CPython将Python编译为中间字节码然后由虚拟机解释,而PyPy使用实时(JIT)编译将Python代码转换为 ...

  7. python自动安装pip教程_谈谈全自动安装常使用的pip install的原理及作用!!!

    正如第一句所说: pip is the package installer for Python. You can use pip to install packages from the Pytho ...

  8. 运行python程序电脑卡死了怎么办_【贴士】电脑运行卡或软件卡死无响应怎么办?...

    IT小贴士 电脑运行卡或软件卡死无响应怎么办?你是否遇到过以下情况: 1.电脑突然死机,鼠标都动不了了: 2.正在运行办公软件,突然就卡的要死,画面都转换不过来: 3.打开一软件,比如:PS.OFFI ...

  9. python卡方检验筛选特征原理_基于Python的遥感特征筛选—递归特征消除(RFE)与极限树(Extra-Trees)...

    引言 基于前几篇文章关于筛选方法的介绍,本篇同样给大家介绍两种python封装的经典特征降维方法,递归特征消除(RFE)与极限树(Extra-Trees, ET).其中,RFE整合了两种不同的超参数, ...

最新文章

  1. cdoj916-方老师的分身 III 【拓扑排序】
  2. 二、ceph编译源码、单机搭建调试环境
  3. String类、StringBuffer类、StringBuilder类的区别
  4. 好看的php验证码,一个漂亮的PHP验证码_PHP教程
  5. 应该怎么样学习前端呢?
  6. STM32工作笔记0062---定时器中断实验
  7. python常用方法_python常用方法(持续更新)
  8. 为什么你很努力,进步却很慢?
  9. Index.ANALYZED in lucene4 is deprecated
  10. [51Nod 1035 最长的循环节] 循环小数的性质
  11. 2022.4月份科研记录【日记】
  12. 人与自然超越彩虹-上
  13. idea 2019.2顶部菜单栏隐藏的恢复办法
  14. Hive分区修复命令MSCK介绍与使用
  15. python汇率兑换_美元与人民币汇率 Python
  16. D盘需要管理员权限问题
  17. android选择头像弹窗,仿QQ的头像选择弹出的对话框
  18. 编程规则 - 2 命名规则
  19. 如何使用阿里巴巴矢量图标库,创建自己的svg图标库(iview ts)
  20. 【小算法】图的遍历之深度优先(DFS)

热门文章

  1. Java BigInteger类| nextProbablePrime()方法与示例
  2. php 期望参数1为资源,PHP:mysql_fetch_array()期望参数1是资源,布尔给定
  3. mysql什么情况会刷脏页_mysql-刷脏页(12)
  4. python 三维图直方图_Python | 阶梯直方图
  5. Java Long类shortValue()方法与示例
  6. asp.net 取windows的所有进程
  7. 进程通信:匿名管道和命名管道
  8. kubernetes 实战 使用 nfs 作为动态 storageClass 存储
  9. GO国内镜像加速模块下载
  10. Apache httpd 配置HTTPS SSL访问 443