本文研究的主要是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程序运行原理图文解析

本文地址: http://www.cppcns.com/jiaoben/python/220455.html

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

  1. python解析器原理_Python程序运行原理图文解析

    本文研究的主要是Python程序运行原理,具体介绍如下. 编译型语言(C语言为例) 动态型语言 一个程序是如何运行起来的?比如下面的代码 #othermodule.py def add(a, b): ...

  2. python显示运行时间_python程序运行进程、使用时间、剩余时间显示功能的实现代码...

    有很多程序运行时间比较长,如果不将运行过程输出将很难判断程序运行的时间.下边这段程序将按照上图所示的格式输出程序运行进程.已用时间.剩余时间. def time_change(time_init): ...

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

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

  4. python怎么在运行中查看执行状态_python,_python程序运行时 查看对象状态,python - phpStudy...

    python程序运行时 查看对象状态 不知大家有没有用过Rthymbox的python console. Rthymbox可以在运行的时候,让它的 交互式命令行 对程序进行控制. 比如说可以调用pla ...

  5. python webdriver点击指令_测开系列Selenium Webdriver Python(20)--Webdriver运行原理

    Webdriver运行原理 转帖请注明出处!谢谢 在开发Webdriver的自动化脚本过程中,Webdriver后台在创建WebDriver实例的过程中,先确认浏览器的原生组件中是否存在可匹配的版本. ...

  6. python使用tqdm实现程序运行进度条

    python使用tqdm实现程序进度条 tqdm源自阿拉伯语单词taqaddum( ) 意思是"进步",是西班牙语中"我非常爱你"的缩写. tqdm deriv ...

  7. python 4.5%2_程序运行慢?你怕是写的假 Python

    Python程序运行太慢的一个可能的原因是没有尽可能的调用内置方法,下面通过5个例子来演示如何用内置方法提升PythGon程序的性能.1. 数组求平方和输入一个列表,要求计算出该列表中数字的的平方和. ...

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

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

  9. 软件基础原理——程序运行原理

    极客时间--后端面试38讲--李智慧老师--听课笔记 程序是如何运行起来的 我们平常写的是文本格式的代码,比如: public class{public static void main(String ...

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

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

最新文章

  1. 大数据+机器学习#x3D;天下无敌!
  2. C语言 位移运算符的使用
  3. linux update语句,关于Update语句的调整(5-1)
  4. Bootstrap 警告框的外观
  5. SQLyog 报错2058 :连接 mysql 8.0.12 解决方法
  6. spring_redis整合
  7. java div和table_详细为你讲解,DIV+CSS布局和TABLE布局的优缺点(经典)
  8. 【物流选址】基于matlab佛洛依德算法求解物流选址问题【含Matlab源码 892期】
  9. STM32 CAN波特率设置
  10. FileUpload1.PostedFile.FileName取不到完整路径
  11. python字符串的比较
  12. 为什么速度环给的是正反馈_什么是正反馈,负反馈,为什么要反馈?
  13. android qq授权申请appkey,手把手带你集成友盟实现授权登录、分享
  14. android 手机型号占有量,2021年安卓手机性能排行及手机品牌占有率
  15. 简易计算器(整数与浮点数(小数)分类输出)
  16. pdb python 命令_使用pdb进行Python调试(下)
  17. 5+免费PPT模板下载网站(干货),亲测有效!(建议收藏)
  18. android 浏览器 遥控器 光标,Unified Remote!让手机变身电视遥控器
  19. 某tx乐固脱壳详细流程
  20. 【游戏开发创新】520程序员的浪漫,给CSDN近两万的粉丝比心心(python爬虫 | Unity循环复用列表 | 头像加载与缓存)

热门文章

  1. [backbone] Getting Started with Backbone.js
  2. C#之回到了最初的起点----解决方案、项目、程序集、命名空间
  3. 谈谈对象和XML文件的转换
  4. java之classloader的对象层次关系
  5. poj2594 Treasure Exploration 二分匹配之最小路径覆盖+传递闭包
  6. Excel表复制、取消工作表保护、解除冻结操作
  7. 嵌入式linux入门六步曲
  8. Atitit 数据库技术体系 艾提拉总结 目录 1. 2. 初始概念 5 2 1.1. 2.1. 数据库的类型,网状,层次,树形数据库,kv数据库。Oodb 多媒体数据库 5 2 1.2. 2.2.
  9. Atitit.  Exception in thread main java.lang.Error: Unresolved compilation problem:
  10. 30多套API接口,还怕满足不了你的量化交易需求?