本文主要介绍的是python程序的执行过程,首先介绍的是编译过程,其次介绍的是过程图解及编译字节码,最后介绍了codeobject对象的属性,具体的跟随小编一起来了解一下。

一、编译过程概述

当我们执行Python代码的时候,在Python解释器用四个过程“拆解”我们的代码,最终被CPU执行返回给用户。

首先当用户键入代码交给Python处理的时候会先进行词法分析,例如用户键入关键字或者当输入关键字有误时,都会被词法分析所触发,不正确的代码将不会被执行。

下一步Python会进行语法分析,例如当“for i in test:”中,test后面的冒号如果被写为其他符号,代码依旧不会被执行。

下面进入最关键的过程,在执行Python前,Python会生成.pyc文件,这个文件就是字节码,如果我们不小心修改了字节码,Python下次重新编译该程序时会和其上次生成的字节码文件进行比较,如果不匹配则会将被修改过的字节码文件进行覆盖,以确保每次编译后字节码的准确性。

那么什么是字节码?字节码在Python虚拟机程序里对应的是PyCodeObject对象。.pyc文件是字节码在磁盘上的表现形式。简单来说就是在编译代码的过程中,首先会将代码中的函数、类等对象分类处理,然后生成字节码文件。有了字节码文件,CPU可以直接识别字节码文件进行处理,接着Python就可执行了。

二、过程图解

三、编译字节码

Python中有一个内置函数compile(),可以将源文件编译成codeobject,首先看这个函数的说明:

compile(...) compile(source, filename, mode[, flags[, dont_inherit]]) -》 code object

参数1:源文件的内容字符串

参数2:源文件名称

参数3:exec-编译module,single-编译一个声明,eval-编译一个表达式 一般使用前三个参数就够了

使用示例:

四、codeobject对象的属性

codeobject有哪些变量,接上节的内容分析一下:

codeobject的co_code代表了字节码,这个字节码有什么含义?我们可以使用dis模块进行python的反编译:

从反编译的结果来看,python字节码其实是模仿的x86的汇编,将代码编译成一条一条的指令交给一个虚拟的cpu去执行。

第一列:行号

第二列:指令在代码块中的偏移量

第三列:指令

第四列:操作数

第五列:操作数说明

python运行程序-一文看懂python程序的执行过程相关推荐

  1. python 推迟运行_一文看懂Python的time模块sleep()方法和strftime()方法

    概述 今天主要介绍一下Python的time sleep()方法和strftime()方法. 一.Python time sleep()方法 Python time sleep() 函数推迟调用线程的 ...

  2. 一文看懂Python 爬虫 进阶(三)

    一文看懂Python 爬虫 进阶(三) 文章目录 一文看懂Python 爬虫 进阶(三) **猫眼电影(xpath)** **链家二手房案例(xpath)** **百度贴吧图片抓取** 这篇几乎都是代 ...

  3. angular 字符串转换成数字_一文看懂Python列表、元组和字符串操作

    好文推荐,转自CSDN,原作星辰StarDust,感觉写的比自己清晰-大江狗荐语. 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力 ...

  4. 一文看懂Python collections模块的高效数据类型

    原作: George Seif, 发表于medium.com, 大江狗原创翻译, 并对原文稍作修改. Python的最大优势之一是其广泛的模块和软件包.这将Python的功能扩展到许多受欢迎的领域,包 ...

  5. ​【Python基础】一文看懂 Pandas 中的透视表

    作者:来源于读者投稿 出品:Python数据之道 一文看懂 Pandas 中的透视表 透视表在一种功能很强大的图表,用户可以从中读取到很多的信息.利用excel可以生成简单的透视表.本文中讲解的是如何 ...

  6. 一文看懂Python多进程与多线程编程(工作学习面试必读)

    进程(process)和线程(thread)是非常抽象的概念, 也是程序员必需掌握的核心知识.多进程和多线程编程对于代码的并发执行,提升代码效率和缩短运行时间至关重要.小编我今天就来尝试下用一文总结下 ...

  7. 一文看懂Python(七)-----断言

    今天在看U-net的PyTorch实现版本的时候,发现里面用到了断言的相关语法,在此记录一下! 一.断言的语法格式 assert <断言判断条件> [,"错误提示消息" ...

  8. 一文看懂Python(六)-----类与对象篇

    今天给大家介绍"对象".众所周知,Python是一门面向对象的编程语言,Python之所以如此强大,很大一部分原因也是因为Python中无处不对象,由此可知,学好Python的关键 ...

  9. 一文看懂小程序以及它即将对行业带来的影响

    小程序正式上线!据说之前12月28号微信公开课现场气氛就热烈空前,数万码农围观男神,科技媒体集体高潮,朋友圈被各类关于小程序的信息刷爆. 但很多吃瓜群众对小程序还是一头雾水,作者深度参与小程序培训课程 ...

最新文章

  1. 如何判断两物体加速度相等_高中物理:速度和加速度知识点
  2. 根据 中序遍历 和 后序遍历构造树(Presentation)(C++)
  3. I春秋—— Crypto Write up(一)
  4. html5 字母索引,jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
  5. 解决Linux操作系统下SSH等终端乱码问题
  6. “error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”解决方法。
  7. 《Web漏洞防护》读书笔记——第10章,反序列化漏洞防护
  8. 软件配置管理计划示例
  9. 语音信号处理入门入籍和课程推荐
  10. mybatis中的when,then,end的用法
  11. 最小二乘法的对偶形式(CVX)
  12. 深度学习研究基因组学
  13. C++标准库分析总结(一)——<标准库简介>
  14. CANoe从入门到精通“保姆级”教程(三)- 经典范例解读
  15. VMware虚拟机使用总结
  16. JavaScript - 日期型字符串增加天数(日期增加指定天数计算)
  17. 深度学习概念——Epoch, Batch, Iteration
  18. 时间戳转换为北京时间
  19. kingcms php 排序 标签,KingCMS PHP版本的评论模块标签应该怎样写?
  20. HTML5期末大作业:大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载

热门文章

  1. 神经网络为什么要归一化
  2. mac 需要修复你的资源库才能运行应用软件
  3. Java 8中处理集合的优雅姿势——Stream
  4. JavaScript编码命名规范及格式规范
  5. 【记录】 安装qflow on ubuntu 16.04
  6. 排序之二分查找插入排序算法
  7. 尼姆博奕 (Nimm Game) 异或运算;
  8. Unity IOC + MVC 实例需要手动释放吗?
  9. Cassandra 分布式集群
  10. ArcGIS JavaScript API 添加点