谈到了Python语句的两种执行方式,实际上,这两种运行方式在本质 上是相同的,它们都是由解释器来解释执行我们提供的Python语句。 这里所说的解释执行是相对于编译执行而言的。我们知道,使用诸如 C或C++之类的编译性语言编写的程序可以从源文件转换成计算机使用 的机器语言, 经连接器连接后形成二进制可执行文件。当我们运行二进制可执行程 序的时候,因为已经编译好了,所以加载器软件把二进制程序从硬盘 载入内存中并运行。
与之不同,Python语言写的程序不需要编译成二进制代码,它可以直 接从源代码运行程序。当我们运行Python文件程序的时候, Python解释器把源代码转换成中间形式:字节码,然后再由Python虚 拟机来执行这些字节码,如图5所示。 这样的话,我们就用不着担心程序的编译,库的连接加载等问题了, 所有这些工作都由Python虚拟机代劳了。 对于Python的解释语言特性,我们要一分为二的看待。一方面,每次 运行时都要进行转换成 字节码,然后再由虚拟机把字节码转换成机器语言,最后才能在硬件 上运行。较之于编译性 编程 语言,每次运行都会多出两道工序,所以它的性能会受到影响。另一 方面,由于不用关心程 序的编译以及库的连接等问题,所以开发工作会变得更轻松;同时虚 拟机距离物理机器更远 了, 所以Python程序更加易于移植,实际上无需改动就能在多种平台上运 行。
1. 在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释 的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算 机上的机器语言还是虚拟机 的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可 以将程序设计语言划分为两大类:编译型语言和解释型语言。
2. 由编译型语言编写的源程序需要经过编译、汇编和链接才能输出目标 代码,然后机器执行目标代码,得出运行结果,目标代码由机器指令 组成,一般不能独立运行, 因为源程序中可能使用了某些汇编程序不能解释引用的库函数,而库 函数代码又不在源程序中,此时还需要链接程序完成外部引用和目标 模块调用的链接任务,最后 输出可执行代码。C、C++、Fortran、Pascal、Ada都是编译实现的。
3. 解释型语言的实现中,翻译器并不产生目标机器代码,而是产生易于 执行的中间代码,这种中间代码与机器代码是不同的,中间代码的解 释是由软件支持的,不能直接 使用硬件,软件解释器通常会导致执行效率较低。用解释型语言编写 的程序是由另一个可以理解中间代码的解释程序执行的。与编译程序 不同的是,解释程序的任务 是逐一将源程序的语句解释成可执行的机器指令,不需要将源程序翻 译成目标代码后再执行。对于解释型Basic语言,需要一个专门的解 释器解释执行 Basic程序,每条语言只有在执行才被翻译。这种解释型语言每执行 一次就翻译一次,因而效率低下。
4. Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言 ,而是编译称为字节码,然后在Java虚拟机上用解释方式执行字节码 。Python 的也采用了类似Java的编译模式,先将Python程序编译成Python字节 码,然后由一个专门的Python字节码解释器负责解释执行字节码。
(Java虚拟机对字节码的执行相当于模拟一个cpu,而ruby1.8--在虚 拟机还未出现前--是通过解释成语法树执行。)
Python是一个解释型的语言。但是为了效率上的考虑,Python也提供 了编译的方法。编译之后是bytecode的形式。Python也提供了和Java 类似的VM来执行这样的bytecode。不同的是,因为Python是一个解释 型的语言,所以编译(compile)不是一个强制的操作。事实上,编 译是一个自动的过程。多数情况下,你甚至不会在意他的存在。编译 成bytecode可以节省加载模块的时间,从而提高效率
除了效率原因,bytecode也增加了反向工程的难度,在某种程度上保 护你的代码。当然,反编译仍然是可以的。所以如果真的想保护代码 ,还是用别的方法吧。
另外Python还提供了-O选项,可以编译生成“优化”的bytecode,文 件扩展名是.pyo。但实际上优化的内容有限,作用不大。
如果希望生成可执行文件,就要依赖于第三方的工具了。
分享到:
相关推荐
本文较为详细的分析了Python解释执行的原理,对于深入理解Python可以起到一定的帮助作用。具体分析如下: 首先,这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从...
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器...
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器...
Python 程序执行原理包括 Python 解释器、字节码、内存管理等方面的知识点。 六、Python2.x 到 Python3.x 的变化 Python2.x 到 Python3.x 的变化包括 print 函数的变化、默认编码的变化、除法运算符的变化、异常的...
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器...
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器...
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器...
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器...
Python虽然是解释型语言,但开发者可以将Python代码打包成可执行文件,这样即便是在没有安装Python开发环境的电脑上,教师和学生也能够运行程序进行教学演示和学习。 在化工原理教学中,文章提到该课程能够帮助学生...
了解Python的运行原理有助于开发者更好地优化代码,理解性能瓶颈,以及如何利用Python解释器提供的工具提升开发效率。通过掌握这些基础知识,可以更好地驾驭Python语言,编写出高效、健壮的程序。
了解Python解释器的工作原理对于提升编程效率和解决问题非常有帮助,因为你可以更好地理解为什么代码会以某种方式运行,以及如何优化它。 Python 2与Python 3之间存在一些显著差异,例如: - 字符串处理:Python 2...
本文档将深入探讨如何调用Python解释器及其工作原理。 ##### 1.1 安装与调用 Python解释器在不同操作系统上的安装位置有所不同: - **Unix/Linux系统**:默认情况下,Python解释器被安装在`/usr/local/bin/python...
同时,由于RustPython的源代码是用Rust编写的,因此它对于那些希望深入了解Python解释器内部工作原理的开发者来说,也是一个宝贵的教育资源。 总的来说,RustPython是Python世界的一个创新尝试,它结合了Rust的高...
在这个压缩包“python之编译原理课后习题答案.zip”中,可能包含了关于Python编译过程、解释执行机制以及相关习题解答的详细内容。 首先,Python的编译原理主要涉及以下几个步骤: 1. **词法分析(Lexical ...
这些模块由Python解释器直接支持,大大增强了开发者的生产力。 6. **异常处理**: Python3使用try/except语句进行异常处理,允许程序在遇到错误时优雅地处理,而不是突然崩溃。 7. **交互式模式**: Python3解释...
Python是一种解释型语言,这意味着它的代码不需要预先编译成机器可执行的二进制代码,而是由Python虚拟机(Python Virtual Machine,PVM)逐行解释执行。 在Python程序启动时,首先会进行解释器的初始化。当导入一...
在Python3的语法中,最重要的概念之一是其解释型的特性,这意味着代码无需编译即可直接执行。Python3的语句通常以缩进划分代码块,使得代码看起来更加整洁。比如,控制流语句(if-else、for、while)以及函数定义...
Python解释器Spython的使用与原理解析 Python是一种高级编程语言,它的执行依赖于解释器。Spython是一个特殊的Python解释器,旨在提供一种无全局解释器锁(GIL,Global Interpreter Lock)的解决方案,从而允许多个...
Subpar通过将Python解释器、标准库和其他依赖项一并打包进单个可执行文件中,使得用户只需双击即可运行程序,无需预先安装Python环境。 Subpar的核心功能是基于Google的沙箱技术,它可以构建出一个受限制的环境,...
它的运行原理主要基于解释器模型,区别于编译型语言,Python代码不需要预先编译成机器语言,而是由解释器逐行解释执行。 CPython是Python的默认解释器,它是由C语言编写的,直接解释Python源码。而Jython则是一个...