python编译过程和执行原理

(1)python执行原理

这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的

机器语言,经过链接器链接之后形成了二进制的可执行文件。运行该程序的时候,就可以把二进制程序从硬盘载入到内存中并运行。

但是对于Python而言,python源码不需要编译成二进制代码,它可以直接从源代码运行程序。当我们运行python文件程序的时候,

python解释器将源代码转换为字节码,然后再由python解释器来执行这些字节码。这样,python就不用担心程序的编译,库的链接加载

等问题了。

对于python解释语言,有以下3方面的特性:

每次运行都要进行转换成字节码,然后再有虚拟机把字节码转换成机器语言,最后才能在硬件上运行。与编译性语言相比,每次多出了编

译和链接的过程,性能肯定会受到影响;而python并不是每次都需要转换字节码,解释器在转换之前会判断代码文件的修改时间是否与

上一次转换后的字节码pyc文件的修改时间一致,若不一致才会重新转换。

由于不用关心程序的编译和库的链接等问题,开发的工作也就更加轻松啦。

python代码与机器底层更远了,python程序更加易于移植,基本上无需改动就能在多平台上运行。

在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算

机上的机器语言还是虚拟机的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可以将程序设计语言划分为两大类:编译型

语言和解释型语言。

编译实现的语言,如:C、C++、Fortran、Pascal、Ada。由编译型语言编写的源程序需要经过编译,汇编和链接才能输出目标代码,然

后由机器执行目标代码。目标代码是有机器指令组成,不能独立运行,因为源程序中可能使用了一些汇编程序不能解释引用的库函数,而

库函数又不在源程序中,此时还需要链接程序完成外部引用和目标模板调用的链接任务,最后才能输出可执行代码。

解释型语言,解释器不产生目标机器代码,而是产生中间代码,这种中间代码与机器代码不同,中间代码的解释是由软件支持的,不能

直接使用在硬件上。该软件解释器通常会导致执行效率较低,用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。

和编译的程序不同的是, 解释程序的任务是逐一将源代码的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码再执行。对于

解释型语言,需要一个专门的解释器来执行该程序,每条语句只有在执行是才能被翻译,这种解释型语言每执行一次就翻译一次,因而效

率低下。

Java解释器,java很特殊,java是需要编译的,但是没有直接编译成机器语言,而是编译成字节码,然后在Java虚拟机上用解释的方式执

行字节码。Python也使用了类似的方式,先将python编译成python字节码,然后由一个专门的python字节码解释器负责解释执行字节

码。

python是一门解释语言,但是出于效率的考虑,提供了一种编译的方法。编译之后就得到pyc文件,存储了字节码。python这点和java

很类似,但是java与python不同的是,python是一个解释型的语言,所以编译字节码不是一个强制的操作,事实上,编译是一个自动的

过程,一般不会在意它的存在。编译成字节码可以节省加载模块的时间,提高效率。

除了效率之外,字节码的形式也增加了反向工程的难度,可以保护源代码。这个只是一定程度上的保护,反编译还是可以的。

(2)Python内部执行过程

一、编译过程概述

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

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

发,不正确的代码将不会被执行。

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

下面进入最关键的过程,在执行Python前,Python会生成.pyc文件,这个文件就是字节码,如果我们不小心修改了字节码,Python下次

重新编译该程序时会和其上次生成的字节码文件进行比较,如果不匹配则会将被修改过的字节码文件进行覆盖,以确保每次编译后字节码

的准确性。

那么什么是字节码?字节码在Python虚拟机程序里对应的是PyCodeObject对象。.pyc文件是字节码在磁盘上的表现形式。简单来说就是

在编译代码的过程中,首先会将代码中的函数、类等对象分类处理,然后生成字节码文件。有了字节码文件,CPU可以直接识别字节码文

件进行处理,接着Python就可执行了。

推荐学习《Python教程》!

python语言不用编译_python程序不需要编译吗相关推荐

  1. mapreduce编程实例python-使用Python语言写Hadoop MapReduce程序

    原标题:使用Python语言写Hadoop MapReduce程序 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 在本教程中,我将描述如何使用Pytho ...

  2. python语言解释性特点_python语言的特点_python的语句

    python语言的优点 ⑴作为初学python的科班出身的小白,python非常简单,非常适合人类阅读.阅读一个良好的 本视频主要详细介绍了Python语言的特点,分别是易于学习.易于阅读.易于维护. ...

  3. python语言的语法_Python第一章基本语言语法

    第一章:基本语法 1.1.1基本的输入输出函数 Print ( ) 作用:输出字符串 用法1: print('代输出字符串') 用法2:用于输出一个或多个变量 print(变量1,变量2,-) 用法3 ...

  4. python培训报告,简述Python语言经验总结_python知识点总结_python培训

    这里介绍Python语言,包括介绍SQLObject.TurboGear.4Suite.Pyro.Twisted.wxPython.希望下面的文章会对你有所帮助. Python语言是不被大多数人知道的 ...

  5. c语言的使用比例远远高于python语言对吗_Python和C语言的战争已经进入白热化,战地记者学无止境将持续为您报道。...

    理论上,python的确比C/C++慢(我对Java的开发没有经验,无法评论).这一点不用质疑. C/C++是编绎语言,直接使用的是机器指令,而python总是跑在的虚拟机上, 把一个逻辑直接转换为机 ...

  6. 把python语言翻译出来_Python语言实现翻译小工具(Python打包成exe文件)

    本文主要向大家介绍了Python语言实现翻译小工具(Python打包成exe文件),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.环境 windows10 python3.5 ...

  7. python语言函数库_Python 的标准库,从0到1学Python

    1.1. 介绍软件测试业务流程的梳理技巧 - 乐搏软件教育 - 软件测试 - Powered By EduSoho​17lebo.com Python 的标准库包括了很多的模块, 从 Python 语 ...

  8. python语言是机器语言_Python解释器:源代码--字节码--机器语言

    "一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1).这个过程通过编译器和不同的标记.选项完成.当你运行你的程序的时 ...

  9. python语言合法命名的_python语言合法命名_python合法命名

    CSDN提供了精准python语言的合法命名信息,主要包含:python语言的合法命名信等内容,查询最新最全的python 单下划线结尾_:只是为了避免与python关键字的命名冲突 双下划线开头:模 ...

最新文章

  1. 区分json与jsonp
  2. java 7 g1_java7中G1垃圾收集器使用和流程总结
  3. 何李石:七牛直播云技术详解
  4. python矩阵_Python 矩阵相关
  5. C语言实现并查集(Disjoint set或者Union-find set)(附完整源码)
  6. aspnet_UsersInRoles_GetUsersInRoles
  7. 前端学习(3203):复习类相关知识
  8. 计算机科学与技术指导情况记录表,计算机科学与技术系 教学情况检查表(期初)...
  9. 12家存在低俗内容的网络文学企业被约谈:严肃查处 深入整改
  10. Python 进阶——标准散列机制
  11. VC++多线程--进程间通信
  12. 【教程】如何查看自己的外网ip是不是公网ip
  13. 女解码高手王小云:十年破译五部顶级密码(图)
  14. 大秦帝国-《治秦九论》
  15. 炉石数据库以及django admin
  16. 解决win10笔记本睡眠后无法唤醒甚至自动关机的问题
  17. 移动之过之过还是UC、GGlive,vfun之过?——cmwap无限流量卡价格飚升背后的故事
  18. 国产安卓和原生android,定制安卓和原生Android到底有哪些不同?真相了!
  19. 学习篇——了解OKR
  20. jar包反编译工具(java-decompiler)

热门文章

  1. apt-get update出现无法连接上 archive.ubuntukylin.com:10006
  2. 【论文排版】编辑WORD的时候,无法删除脚注(删除了文字后,还留下横线和空格)
  3. python中的怎么打出来_如何在Python中打印上标?
  4. 1056: 幸运数字 Java
  5. Vue + ElementUI 仿视频网站&抖音创作者平台
  6. 一张小名片引发的地球大危机
  7. CSDN开发者周刊第 21期:Wi-Fi 之父辞世,谷歌服务器再次全球宕机;Windows 10 将支持安卓应用
  8. 我的世界java活板门会被烧没_《我的世界》新版1.14的活板门特性改变了?玩家开发出新的玩法!...
  9. 《英语口语900句 (624页+360分钟录音)》(Oral English 900 Expressions)
  10. sqoop 导数据从 mysql 到 hdfs,load 进 hive