天天看点

《Python硬件编程实战》——1.2 对Python的四种定义

本节书摘来自华章计算机《python硬件编程实战》一书中的第1章,第1.2节,作者:李茂 著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

对于某种计算机语言,根据其特点和语言本身侧重点的不同会有不同的分类和叫法。python作为计算机语言的其中一种也不例外。接下来就来详细解释python的各种不同的分类和叫法的详细含义。

1.2.1 一种脚本语言

脚本的英文是script。一般的读者看到script这个单词往往首先想到的是电影的剧本,我们大多数人都知道电影剧本其实就是由一段段的脚本所组成的,即电影剧本的脚本决定了电影中的人和物要做哪些事情以及具体怎么做。

与之类似,计算机中的脚本决定了计算机中的操作系统和各种软件工具要做哪些事情以及具体怎么做。

此外,根据笔者的理解,脚本这个词还会让人有另外一种感觉:随性。

所谓的随性就像在现实中写电影脚本,直接拿张纸和一支笔就可以写了,写完之后就可以拿去使用,即拍电影了。而对应的计算机中的脚本也是类似的过程,用户想要实现一个功能,在构思了如何做之后,就可以直接找个文本编辑器写上对应的脚本,也就是普通的文本,接着让计算机去运行,从而实现想要的功能。当然计算机脚本与电影脚本也有不同之处:计算机中的脚本所运行的环境中有对应的脚本解析器,可以解释并执行对应的脚本。

例如,若创建linux中的shell脚本,可以先创建一个普通文本文件,然后在其中添加shell脚本代码,保存文件,接着就可以在linux的带有shell解释功能的环境中运行了。

那些相对“随性”的脚本语言来说不那么“随性”的非脚本语言叫作编译型语言,比如c语言,它们需要再加上编译这个步骤之后才能生成可以运行的程序,然后才能执行程序。

编译型语言和脚本语言的对比

(1)编译型语言

简单地说,编译性语言就是需要用该语言的编译器将源代码编译为可执行程序,然后才能运行可执行程序的语言。此编译过程需要先将源代码编译为目标文件,然后把目标文件加上必要的库文件,最后再链接为最终的可执行文件。

(2)脚本语言

脚本语言是无需用编译器编译源代码,可直接运行该源码形式脚本文件的语言。而直接能够运行脚本文件的背后,是当前环境中存在着此脚本的解析器。解析器负责读入此脚本源码,以及后续解析并执行的动作。

编译型语言和脚本语言的执行示例

(1)编译型语言的执行

编译型语言的执行过程为

源代码?(用编译器编译成)可执行程序?运行程序(可执行文件)

以在安装了visual studio 2010的windows 7中编译运行c语言为例,其过程为

hello.c?(用编译器cl编译为)hello.exe?运行hello.exe

其中,hello.c是先被编译器cl编译为目标文件hello.obj,然后再调用link将目标文件hello.obj链接为可执行文件hello.exe的。

(2)脚本语言的执行

脚本语言的执行过程为:

源代码?直接(在具有了解析器的环境中)运行程序(脚本源码)

以在安装了python的windows中运行python脚本为例,其过程为:

demopython.py?(直接在有了python解析器python.exe的环境中)运行demopython.py

其中,python.exe是安装了python时就会被安装的python解释器,负责解析并运行python脚本文件。

1.2.2 一种解释型语言

我们有时候也会把python称为一门解释型语言。这是因为脚本语言的天然特点之一就是解释性,而作为脚本语言的python因此也可以被称为是一门解释型语言。

什么是解释型语言

脚本语言的特点是在具有解释器的环境中,以源代码的形式而无需编译就可以直接执行。脚本语言的内部执行过程是首先由解析器一行一行地读取脚本的源代码,同时解析每一行,然后给出执行后的结果。通俗地说就是:读一行,解释一行,执行一行。由此,脚本语言就天然地具有了解释性的特点,所以脚本语言也常被称为解释型语言。

1.2.3 一种高级语言

在解释python为何是一种高级语言之前先来解释一下什么是高级语言。

什么是高级语言

事物的发展都是从低级走向高级的,计算机语言的发展也不例外。早期的计算机语言大多数都是针对硬件上的机器本身所开发的语言,一般叫作汇编语言。汇编语言之所以常被称为低级语言,是因为其语言本身直接和硬件打交道,而缺少对计算机细节的抽象,相对而言不是那么易于程序员理解和使用。

随着计算机语言的发展,出现了对计算机细节更宏观抽象的语言,这类语言更多地采用人类更容易理解的元素和概念,因此对于程序员来说,相对更容易理解、学习、掌握和使用这类语言,而这类语言被称为高级语言。常见的一些高级语言有fortran、pascal、lisp、c、c++、java、c#、python、ruby等。

高级语言和低级语言的对比

高级语言在本身的设计层面会考虑到对计算机细节的封装和抽象。

比如一个普通的计算机语言概念中的数组,在常见的高级语言中有具体的实现,程序员可以很方便地直接拿来使用。而作为大多是汇编语言的低级语言,它们对于数组的实现和使用则很复杂,需要手动去写很多复杂的汇编代码才能使用。因为汇编语言等低级语言和底层硬件有关系,比如不同的cpu会有不同的指令集和不同的寄存器等各种内部资源,所以要具体实现数组这样的功能时,会有千差万别,需要考虑到很多细节和不同的实现方式,需要每个程序员对当前所使用的cpu的所有架构、内部资源等细节都很清楚,同时也需要对当前特定cpu的指令的语法都很清楚。在此前提下,才可以写出对应的汇编代码,才可以实现对应的数组。

由此可见,汇编语言会涉及太多物理层面上和硬件上的实现细节,不利于人类以普通的逻辑去理解,更难学习和掌握。而相对来说,高级语言涉及的基本元素和概念和人类的思维很相似,所以高级语言对于程序员来说更加容易理解、学习和掌握。

然后我们再来具体地解释为何python是其中一种高级语言。python在语言设计的时候,和其他高级语言类似,也完全具有常用的各种基本元素,比如各种普通变量、列表、函数等内容,完全符合人类的逻辑,易于理解、学习和掌握,所以python本身的确是一种高级语言。

1.2.4 一种面向对象的语言

在解释为何python是一种面向对象的语言之前,先来简要介绍一下什么是面向对象的语言。

什么是面向对象的(高级)语言

首先要明确的是,面向对象的计算机语言这个概念是针对高级语言来说的。其次,在一堆高级语言里面,有些是在设计该语言本身时,对于语言本身的基本元素是以对象的方式设计的,而不同的对象之间的交互则成为整个程序运行的主要表现形式。

此处的对象往往和现实中的物体、概念、逻辑的整体等内容是一一对应的关系。由于程序员用基于对象的编程语言设计程序时往往更加直观和易于理解,更加容易简化问题的处理逻辑,所以相对而言,面向对象的语言简化了使用该语言解决实际问题的复杂度,提高了处理事情的效率,所以程序员更容易理解、学习、掌握和使用。

而python语言本身的设计也是基于对象的,也是面向对象的各种概念和逻辑的,所以说python也是一种面向对象的编程语言。

有了前面介绍的对于不同python称谓的理解之后,我们再来总结一下作为计算机编程语言的python的常见且基本的定义:python是一种面向对象的、解释型的计算机高级语言。

至此可能很多读者才突然明白:哦,原来在各种资料或教程中所使用的python的上述定义背后,还隐含着如此多方面的含义,原来python的各种特点和称谓是这么回事。

如果读者会有此感悟,则才真正实现了笔者写本python教程要实现的目的:希望学习技术的读者,不仅要知其然,也要知其所以然。将此逻辑应用到此处的含义就是:不仅要知道python是如此定义的,更要知道为何会有这样的定义,即python如此定义背后的真正完整的含义。