Python语言概述及其运行机制详解

Python语言简介

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。


Python由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。官方宣布,2020 年1月1日,停止 Python 2 的更新。Python 2.7 被确定为最后一个 Python 2.x 版本。现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。


Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。


Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。


Python 是一种解释型语言:这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

Python 是交互式语言:这意味着,我们可以在一个 Python 提示符 >>> 后直接执行代码。

Python 是面向对象语言:这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

Python语言的特点

1、简单易学、可读性高、语法优美:Python遵循"简单、优雅、明确"的设计哲学。在 Python 语言中,采用缩进来标识代码块,通过减少无用的大括号、语句末尾的分号等视觉杂讯,使得代码的可读性显著提高。阅读一段良好的 Python 程序就感觉像是在读英语一样,能够专注于解决问题而非纠结于繁琐的语法结构。


2、开发效率高:Python是一种高级语言,相对于C来讲,牺牲了性能而提升了编程人员的效率。它使得程序员可以不用关注底层细节,而把精力全部放在业务逻辑的实现上。


3、广泛的标准库: Python 语言号称自带电池,寓意是 Python 语言的类库非常的全面,Python的最大的优势之一就是它丰富的库。


4、强大的第三方库、应用领域广泛:Python社区提供了大量的第三方模块,使用方式与标准库类似。功能涵盖计算机视觉、科学计算、人工智能、机器学习、Web开发、数据库接口、图形系统多个领域。


5、互动性:互动性的支持,我们可以从终端输入执行代码并获得结果,互动的测试和调试代码片断。


6、可移植性:基于其开放源代码的特性,Python已经被移植到许多平台。


7、可扩展性与可嵌入性:如果我们需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,那么可以使用C/C++完成那部分程序,然后从Python程序中进行调用。当然,我们也可以将Python嵌入到C/C++程序中,使程序的用户获得"脚本化"的能力。


数据库与GUI编程:Python提供所有主要的商业数据库的接口;Python支持GUI可以创建和移植到许多系统调用。


Python语言不可忽视的问题

1、运行速度慢:由于Python是解释型语言,程序的代码在执行时会一行一行地翻译成CPU所能理解的机器码,这个翻译过程非常耗时,但是由于C/C++语言是编译型语言,程序直接编译成机器码,因此 Python 的运行速度相比C/C++语言确实慢很多。但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助专业的测试工具。那么其实对于大多数情况,Python是完全可以满足我们对程序速度的要求的,除非编写对运行效率要求极高的程序。


2、Python2 与 Python3 不兼容


3、代码无法加密:对于解释性语言,发布程序,就是发布源代码。对于保密性高的程序,Python语言并不适合。


4、多线程无法利用多核CPU:Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行。


Python程序运行机制详解

深入理解 ‘解释与编译’

我们首先了解一下解释型语言与编译型语言。


计算机程序,其实就是一组计算机指令集,能真正驱动机器运行的是机器指令,但让普通开发者直接编写机器指令是不现实的,因此就出现了计算机高级语言。高级语言允许使用自然语言(通常就是英语)来编程,但高级语言的程序最终必须被翻译成机器指令来执行。


当然,计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器指令,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器指令。而这种转换的方式有两种:编译、解释。高级语言按照计算机执行方式不同可分成两类:静态语言和脚本语言,静态语言采用编译执行,脚本语言采用解释执行。


编译型语言在程序执行之前,需要一个特定的编译过程,把源代码编译成计算机可以执行机器码,之后直接运行编译后的文件即可。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。例如C、C++、Go等属于编译型语言。


编译型语言具有以下特点:


对于相同源代码,编译所产生的目标代码执行速度更快。

与特定平台相关,一般无法移植到其他平台,因此编译型语言的平台移植性并不好。


解释型语言使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。它不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。Python、Php等属于解释型语言,但Python并不是完全的解释性语言,后续会详述。


解释型语言具有以下特点:


解释型语言每次运行都需要将源代码解释为机器码并执行,效率较低。

只要平台提供相应的解释器,就可以运行源代码,所以解释性语言的平台移植性较好。

解释执行需要保留源代码,程序纠错和维护十分方便。


解释和编译的区别在于编译是一次性地翻译,一旦程序被编译,不再需要编译程序或者源代码。解释则在每次程序运行时都需要解释器和源代码。


编译过程只进行一次,因此,编译过程的速度并不是关键,目标代码的运行速度是关键。因此,编译器一般都集成尽可能多的优化技术,使生成的目标代码具备更好的执行效率。然而,解释器却不能集成太多优化技术,因为代码优化技术会消耗运行时间,使整个程序的执行速度受到影响。


简单来说,解释执行、逐条运行用户编写的代码,没有纵览全部代码的性能优化过程,因此执行性能略低,但可以支持跨硬件或操作系统平台,保留源代码对升级维护十分有利,适合非性能关键的程序运行场景。


Python语言是一种被广泛使用的高级通用脚本编程语言,虽采用解释执行的方式,但它的解释器也保留了编译器的部分功能,随着程序运行,解释器也会生成一个完整的目标代码。这种解释器和编译器结合的新解释器是现代脚本语言为了提升计算机性能的一种有益演进。


Python解释器

使用C/C++等编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制可执行文件。运行该程序的时候,就可以二进制程序从硬盘载入到内存中并运行。


但是对于Python而言,Python源码不需要编译成二进制代码,它可以直接从源代码运行程序。 Python解释器将源代码转换为字节码,然后把编译好的字节码转发到Python虚拟机(PVM)中进行执行。当我们运行n程序的时候,Python解释器会执行两个步骤:


1、把源代码编译成字节码。编译后的字节码是特定于Python的一种表现形式,它不是二进制的机器码,需要进一步编译才能被机器执行,这也是Python代码无法运行的像C/C++一样快的原因。如果Python进程在机器上拥有写入权限,那么它将把程序的字节码保存为一个以.pyc为扩展名的文件,如果Python无法在机器上写入字节码,那么字节码将会在内存中生成并在程序结束时自动丢弃。在构建程序的时候最好给Python赋上在计算机上写的权限,这样只要源代码没有改变,生成的.pyc文件可以重复利用,提高执行效率。


2、把编译好的字节码转发到Python虚拟机(PVM)中进行执行。PVM是Python Virtual Machine的简称,它是Python的运行引擎,是Python系统的一部分,它是迭代运行字节码指令的一个大循环,一个接一个地完成操作。


因此,Python并非完全是解释性语言,它是有编译的,先把源码.py文件编译成.pyc或者.pyo,再由Python的虚拟机执行,相对于py文件来说,编译成.pyc和.pyo本质上和.py没有区别,只是对于这个模块的加载速度提高了,并没有提高代码的执行速度。



Python 解释器的几种实现版本

Python解释器有三种主要的实现方式,CPython、Jython和IronPython 三种实现方式 。


CPython:CPython 是标准的实现,其它的都是有特定目标的。 CPython 是由C语言编写的,它是大多数OS预装的Python解释器,也是所有Python解释器中运行最快、最完整、最健全的。


Jython:Jython 是一种Python语言的替代实现方式,其目的是为了与Java编程语言集成,Jython 包含了Java类,这些类编译Python源代码、形成Java字节码,并将得到的字节码映射到Java虚拟机(JVM)上。因为Jython要比CPython 慢而且也不够健壮,它往往看作是一个主要面向寻找Java代码前端脚本语言的Java开发者的一个有趣的工具。


IronPython:IronPython 设计的目的是让Python 程序可以与Windows 平台上的.NET 框架以及与之对应的Linux的上开源的Mono编写成的应用集成

————————————————

版权声明:本文为CSDN博主「ZY-JIMMY」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/ZYZMZM_/article/details/103584738


该文章对你有帮助吗,打开微信扫码打赏哦,谢谢! 求分享转发:

 

 

粤ICP备19116230号
友情链接: 码农藏书阁 天天链