本文研究的主要是Python程序运行原理,具体介绍如下。

编译型语言(C语言为例)

动态型语言

一个程序是如何运行起来的?比如下面的代码

#othermodule.py

def add(a, b):

return a + b

#mainrun.py

import othermodule

a = ['xiaoke', 1, 'python']

a = 'xiaoke string'

def func():

a = -5

b = 257

print(a + b)

print(a)

if __name__ == '__main__':

func()

res = othermodule.add(1, 2)

print(res)

分析

dir 函数

Python 的内置函数 dir 可以用来查看一个命名空间下的所有名字符号。一个用处是查看一个命名空间的所有属性和方法(这里的命名空间就是指类、函数、module)。

比如,查看当前的命名空间,可以使用 dir(),查看 sys 模块,可以使用 dir(sys)

def 指令

def func(),在字节码指令中就是 MAKE_FUNCTION。

Python 是动态语言,def 实际上是执行一条指令,用来创建函数

(class 则是创建类的指令),而不仅仅是个语法关键字。

函数并不是事先创建好的,而是执行到的时候才创建的。

def func() 将会创建一个名称为 func 的函数对象。

实际上是先创建一个函数对象,然后将 func 这个名称符号绑定到这个函数上。

pyc文件

pyc 文件是 PyCodeObject 对象在硬盘上的表现形式。生成pyc文件:

python -m py_compile xx_module.py

pyc文件三大作用

创建时间,py文件比pyc文件新,则从新生成pyc

magic num做运行前版本检测,版本不同从新生成pyc

PyCodeObject 对象

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

这个 PyCodeObject 对象包含了 Python 源代码中的字符串,常量值,以及通过语法解析后编译生成的字节码指令。PyCodeObject 对象还会存储这些字节码指令与原始代码行号的对应关系,这样当出现异常时,就能指明位于哪一行的代码。

import 指令

import 指令是用来载入 module 的,如果需要,也会顺道做编译的事。但 import 指令,还会做一件重要的事情就是把 import 的那个 module 的代码执行一遍,这件事情很重要。

Python 是解释执行的,连函数都是执行的时候才创建的。如果不把那个 module 的代码执行一遍,那么 module 里面的函数都没法创建,更别提去调用这些函数了。

执行代码的另外一个重要作用,就是在这个 module 的命名空间中,创建模块内定义的函数和各种对象的符号名称(也就是变量名),并将其绑定到对象上,这样其他 module 才能通过变量名来引用这些对象。

Python 虚拟机还会将已经 import 过的 module 缓存起来,放到一个全局 module 集合 sys.modules 中。

这样做有一个好处,即如果程序的在另一个地方再次 import 这个模块,Python 虚拟机只需要将全局 module 集合中缓存的那个 module 对象返回即可。

总结

以上就是本文关于Python程序运行原理图文解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

python解析器原理_Python程序运行原理图文解析相关推荐

  1. java能够运行的原理_JAVA程序运行原理分析(一)

    作为JAVA的开发人员,需要知道JAVA是如何运行的,这个需要好好思考下. (一)class文件内容 class文件包含JAVA程序执行的字节码,也就是说程序的执行是通过class里面的内容进行执行的 ...

  2. XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较

    6月20日 XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较  1:DOM     DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结 ...

  3. pyinstaller打包生成的exe文件并使用python终止后台的exe程序运行

    pyinstaller打包生成的exe文件并使用python终止后台的exe程序运行 目录 pyinstaller打包生成的exe文件并使用python终止后台的exe程序运行 #pyinstalle ...

  4. python程序的原理_Python程序的执行原理(转)

    1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行. 2. 字节码 字节码在Python虚拟机程序里对应的是PyCo ...

  5. 简述python执行原理_Python程序的执行原理(1)(2)

    Python程序的执行原理(1)(2) 1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行. 2. 字节码 字节码在 ...

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

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

  7. python装饰器性能_python装饰器的特性原理详解

    这篇文章主要介绍了python装饰器的特性原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天发现了装饰器的另一种用法,下面就先上代码: d ...

  8. 重新认识linux应用程序运行原理

    文章目录 总述 裸程序 存储布局 DEMO 裸程序的缺点 ELF程序 存储布局 hello world分析 elf可执行程序的适用场景 新的需求 共享库 进程地址空间 进程的内存管理 内核工作原理 L ...

  9. python自动化和教程_python自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1 概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领可不 ...

最新文章

  1. php程序中用户名含特殊字符怎么办,php中包含ñ等特殊字符
  2. 使用微型计算机的基础知识,计算机应用基础考试大纲基本要求1具有使用微型计算机的基础知识.DOC...
  3. amqp协议 面试_2020最新分布式消息中间件-RabbitMQ面试题(必问)
  4. 软件测试——语句覆盖
  5. 谷歌浏览器不能安装离线插件——可行方法
  6. Android 5.0新特性
  7. 表格如何excel在线转letex
  8. Java基础,无许复杂语句,倒序输出整数,int i = 123;输出321
  9. 复盘-对过去的事情做思维演练
  10. 002 如何将电子版一寸照以照片的方式打印出来
  11. 无人机底层开发-MPU6050+磁力计的四元数解算姿态
  12. 飞鸽传书2011下载(飞鸽传书)
  13. android推箱子实验报告,android开发——推箱子小游戏(前序)
  14. 介绍java中Pair和Map的区别
  15. win10进不了BIOS界面
  16. u盘格式化了怎么恢复数据
  17. 移动硬盘\U盘在使用过程中0x80070570 文件或目录损坏且无法读取 CHKDSK 修复方法
  18. 学Java可以不学算法吗-学java有必要学算法吗?
  19. 如何将数据从一台主机发送到另一台主机上(详解)
  20. Flink 窗口函数(Window Functions)处理迟到数据

热门文章

  1. 设计师必备灵感网站,优秀作品聚集在集设
  2. UI素材资源|Material风格的插图,有品位的素材
  3. 设计素材导航网站,宝藏都在里面!
  4. Linux内核构建与开发
  5. Linux网络协议栈:关闭一个还有没发送数据完的TCP连接
  6. 函数别名c语言,C最佳实践 – 函数类型别名std :: function或T.
  7. Django里面的sql查询语句
  8. 惠而浦扫地机器人充不进电_【今日关注】惠而浦扫地机器人怎么样?体验2个月之肺腑之言? | 智能扫地机器人评测...
  9. flutter 判断字符创_Flutter面经算法篇
  10. 关于计算机网络维护毕业论文,计算机专业毕业论文---计算机网络故障处理及维护方法...