现有的大部分Python 教程一般都是简单介绍一下Python的用处,然后就开始讲数据结构、控制流、文件输入输出、异常等,那对于一些完全不了解什么是编程语言的朋友来说,就会很难迅速的进入状态。所以本文主要想介绍一下什么是编程语言以及Python的主要组成部分,让大家在学习Python的过程中不会觉得迷茫。 有了这样的一个大的框架之后,就好像打游戏的时候的地图一样,让大家在学习的过程知道自己每一步处在什么位置,以及目标在哪里。
1. 编程语言的定义
根据维基百科的介绍,编程语言是是用来定义计算机程序的形式語言。它是一种被标准化的交流技巧,用来向计算机发出指令。举个例子,比如一个中国人要和一个美国人交流的时候,会选择使用英语来交流,因这样双方才能互相理解,那么人类要和计算机交流的时候,应该用什么语言呢?这种语言,我们称之为是编程语言。
2. 低级语言和高级语言
我们知道,计算机只能理解二进制,那使用二进制给机器发送指令的方式就是机器语言(binary language),这是最底层的语言,机器执行起来也最快,但是对于我们人类来说,如果要通过0000 来 告诉计算器去Load,用0001 来告诉计算机去存储,甚至还要根据计算机处理器的位数来改指令,只怕脑子要爆炸。因此之后提出了汇编语言(assembly language),汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是 ADD。 汇编语言比机器语言稍微好懂了一点,但是依然更为接近机器的理解模式而不是人类的理解模式。这些语言我们称之为低级语言(Low level language),因为人类比较难理解他们。在此之后,针对不同的应用,不同的目的,为了让人类可以更容易的学习和编写程序,人们提出了成千上万种高级编程语言( high level language)。比较主流的高级语言有C,C++,C#,Java,Python,Perl,HTML,Javascript,Objective C等等。C主要用来写操作系统,Java主要用来写服务器,大数据,安卓app开发等,html写网页(html似乎也不能算作一门语言)。这些语言都比较类似英语的语法,所以对于人类来说都更为容易理解和学习。Python相对于C和C++来说更为高级一点,也就是更为接近人类的理解,更为容易学习 。
3. Python的组成
上面提到编程语言的目的是用来定义计算机程序,来让计算机执行我们希望他执行的一些操作,因此他们都有一些共通的部分,也就是几乎所有的编程语言都需要有的部分。主要是数据结构、输入输出、异常、流程控制、标准库和扩展库。
那么在一个项目中,这些组成部分的作用分别是怎么样的呢?我画了如下的一个图:
这幅图,我们从里向外看,在最里面是一个类似于流程图的图,首先是输入,通常一个程序总是需要去处理一些什么东西,比如来自网络的请求,比如从网页上爬下来的数据,比如从数据库取出来的数据,比如一张图片,比如从文件读取出来的数据,比如用户输入的简单的名字或者数字等等等等。这个通常是一个程序的第一个步骤,获取这些输入,得到输入之后呢,我们就需要把这个数据存储进去一个容器——数据结构。数据结构是用来存储数据的内存单元,Python里主要有三大类数据类型,第一类是基本数据类型(Basic data type),即数字(number)和字符串(string);第二类是Python内置的数据结构,即列表(List),元组(Tuple) 和 字典(Dict);第三类是类(class)。我认为这三类的关系是Class 可以包括 List,Tuple,Dict,Number和String, 而List,Tuple和Dict的元素可以由Number和String组成,其实也可以是一个对象,即Class的实例。三者之间是有种相辅相成的感觉的。数据存储之后,我们会需要进行一系列的计算操作等,那通常会需要去针对不同的输入做不同的操作,或者对同一个操作做很多次,这个时候就需要流程控制,Python中的流程控制主要包括了if/else, while, for 以及俩辅助的continue和break。当操作完成之后,我们就可以把这个结果展示出来,这一步就是输出,可以输出到GUI上显示一个图或者一个数字,可以写出文件给用户后续使用,可以返回网络请求给客户端等等等等。这就是通常一个程序的流程。那么我们也知道,在程序的运行过程中可能会出现一些我们在编写程序的时候并没有意料到的问题,那遇到这些问题的时候,我们可能希望程序不要直接Crash,而是可以输出一些信息提示我们有问题,或者不要crash而是进行第二次尝试等,所以Python提供了一个Exception类来把大部分已有的Exception归类,并且提供try/except来让用户进行异常的处理。 这就是一个程序的几乎全部的流程。
那么之所以我们可以使用到List Tuple Dict等等,而不用二进制或者汇编来表示我们想要的数据结构,是因为Python提供了标准库,也就是Standard Library。这个标准库定义了我们刚刚提到的前两类数据结构,定义了很多日常会用到的操作,比如针对字符串的查找,大小写检查,split等等,比如针对数学上的求共轭数,求幂等等。因为有了这个库,我们才能更方便的写程序,而不用自己从头开始定义一些常用又很基础的方法(method)。
除了标准库之外,很多的开发者还开发出了许多有用又稳定的第三方库,比如pandas,sqlalchemy等等,这些库可以帮助大家更好更快速地开发。标准库和第三方库给所有的开发者提供了各方面的支持,是开发过程中不可或缺的部分。
以上是我对Python和编程语言的理解,如果有问题,欢迎大家批评指正。