了解Python

废话内容:html

  1. Python简介
  2. 编程语言类别

引言python

计算机语言有好多种,C、C++、C#、JAVA、PHP、Python等等,而咱们今天开始学习Python,你应该也据说过它相对比较简单。程序员

Python简介数据库

Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。编程

如今,全世界差很少有600多种编程语言,但流行的编程语言也就那么20来种。安全

总的来讲,这几种编程语言各有千秋。C语言是能够用来编写操做系统的贴近硬件的语言,因此,C语言适合开发那些追求运行速度、充分发挥硬件性能的程序。而Python是用来编写应用程序的高级编程语言。服务器

 

当你用一种语言开始做真正的软件开发时,你除了编写代码外,还须要不少基本的已经写好的现成的东西,来帮助你加快开发进度。好比说,要编写一个电子邮件客户端,若是先从最底层开始编写网络协议相关的代码,网络

那估计一年半载也开发不出来。高级编程语言一般都会提供一个比较完善的基础代码库,让你能直接调用,好比,针对电子邮件协议的SMTP库,针对桌面环境的GUI库,在这些已有的代码库的基础上开发,一个电子邮编程语言

件客户端几天就能开发出来。Python就为咱们提供了很是完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称做“内置电池(batteries included)”。用Python开发,许多功能没必要从零编写,直接使用现成的便可。工具

除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。固然,若是你开发的代码经过很好的封装,也能够做为第三方库给别人使用。

 

许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。不少大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。

 

龟叔给Python的定位是“优雅”、“明确”、“简单”,因此Python程序看上去老是简单易懂,初学者学Python,不但入门容易,并且未来深刻下去,能够编写那些很是很是复杂的程序。

 

总的来讲,Python的哲学就是简单优雅,尽可能写容易看明白的代码,尽可能写少的代码。若是一个资深程序员向你炫耀他写的晦涩难懂、动不动就几万行的代码,你能够尽情地嘲笑他。

 

那Python适合开发哪些类型的应用呢?

首选是网络应用,包括网站、后台服务等等;

其次是许多平常须要的小工具,包括系统管理员须要的脚本任务等等;

另外就是把其余语言开发的程序再包装起来,方便使用。

 

最后说说Python的缺点。

任何编程语言都有缺点,Python也不例外。优势说过了,那Python有哪些缺点呢?

第一个缺点就是运行速度慢,和C程序相比很是慢,由于Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程很是耗时,因此很慢。而C程序是运行前直接编译成CPU能执行的机器码,

因此很是快。可是大量的应用程序不须要这么快的运行速度,由于用户根本感受不出来。例如开发一个下载MP3的网络应用程序,C程序的运行时间须要0.001秒,而Python程序的运行时间须要0.1秒,慢了100倍,

但因为网络更慢,须要等待1秒,你想,用户能感受到1.001秒和1.1秒的区别吗?这就比如F1赛车和普通的出租车在北京三环路上行驶的道理同样,虽然F1赛车理论时速高达400千米,但因为三环路堵车的时速

只有20千米,所以,做为乘客,你感受的时速永远是20千米。

不要在乎程序运行速度

第二个缺点就是代码不能加密。若是要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不一样,C语言不用发布源代码,只须要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。

要从机器码反推出C代码是不可能的,因此,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。

这个缺点仅限于你要编写的软件须要卖给别人挣钱的时候。好消息是目前的互联网时代,靠卖软件受权的商业模式愈来愈少了,靠网站和移动应用卖服务的模式愈来愈多了,后一种模式不须要把源码给别人。

再说了,如今如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有无数很是优秀的像Linux同样的开源代码,咱们千万不要高估本身写的代码真的有很是大的“商业价值”。那些大公司的代码不肯意

开放的更重要的缘由是代码写得太烂了,一旦开源,就没人敢用他们的产品了。

哪有功夫破解你的烂代码

固然,Python还有其余若干小缺点,请自行忽略,就不一一列举了。

 编程语言类别

Python是一门什么样的语言呢?

编程语言主要从如下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每一个分类表明什么意思呢,咱们一块儿来看一下。

编译和解释的区别是什么?

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机能够直接以机器语言来运行此程序,速度很快; 

解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,因此运行速度是不如编译后的程序运行的快的. 

这是由于计算机不能直接认识并执行咱们写的语句,它只能认识机器语言(是二进制的形式)

 

 

 

 编译型vs解释型

编译型
优势:编译器通常会有预编译的过程对代码进行优化。由于编译只作一次,运行时不须要编译,因此编译型语言的程序执行效率高。能够脱离语言环境独立运行。

缺点:编译以后若是须要修改就须要整个模块从新编译。编译的时候根据对应的运行环境生成机器码,不一样的操做系统之间移植就会有问题,须要根据运行的操做系统环境编译不一样的可执行文件。

解释型
优势:有良好的平台兼容性,在任何环境中均可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就能够,能够快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

1、低级语言与高级语言

最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译,从纸带打孔输入便可执行获得结果。后来为了方便记忆,就将用0、1序列表示的机器指令都用符号助记,这些与机器指令一一对应的助记符就成了汇编指令,从而诞生了汇编语言。不管是机器指令仍是汇编指令都是面向机器的,统称为低级语言。由于是针对特定机器的机器指令的助记符,因此汇编语言是没法独立于机器(特定的CPU体系结构)的。但汇编语言也是要通过翻译成机器指令才能执行的,因此也有将运行在一种机器上的汇编语言翻译成运行在另外一种机器上的机器指令的方法,那就是交叉汇编技术。

高级语言是从人类的逻辑思惟角度出发的计算机语言,抽象程度大大提升,须要通过编译成特定机器上的目标代码才能执行,一条高级语言的语句每每须要若干条机器指令来完成。高级语言独立于机器的特性是靠编译器为不一样机器生成不一样的目标代码(或机器指令)来实现的。那具体的说,要将高级语言编译到什么程度呢,这又跟编译的技术有关了,既能够编译成直接可执行的目标代码,也能够编译成一种中间表示,而后拿到不一样的机器和系统上去执行,这种状况一般又须要支撑环境,好比解释器或虚拟机的支持,Java程序编译成bytecode,再由不一样平台上的虚拟机执行就是很好的例子。因此,说高级语言不依赖于机器,是指在不一样的机器或平台上高级语言的程序自己不变,而经过编译器编译获得的目标代码去适应不一样的机器。从这个意义上来讲,经过交叉汇编,一些汇编程序也能够得到不一样机器之间的可移植性,但这种途径得到的移植性远远不如高级语言来的方便和实用性大。


2、编译与解释

编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,两者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。

解释具备良好的动态特性和可移植性,好比在解释执行时能够动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不一样的系统上,则程序不用改动就能够在移植了解释器的系统上运行。同时解释器也有很大的缺点,好比执行效率低,占用空间大,由于不只要给用户程序分配空间,解释器自己也占用了宝贵的系统资源。

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机能够直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,因此运行速度是不如编译后的程序运行的快的.

 

编译型和解释型
咱们先看看编译型,其实它和汇编语言是同样的:也是有一个负责翻译的程序来对咱们的源代码进行转换,生成相对应的可执行代码。这个过程说得专业一点,就称为编译(Compile),而负责编译的程序天然就称为编译器(Compiler)。若是咱们写的程序代码都包含在一个源文件中,那么一般编译以后就会直接生成一个可执行文件,咱们就能够直接运行了。但对于一个比较复杂的项目,为了方便管理,咱们一般把代码分散在各个源文件中,做为不一样的模块来组织。这时编译各个文件时就会生成目标文件(Object   file)而不是前面说的可执行文件。通常一个源文件的编译都会对应一个目标文件。这些目标文件里的内容基本上已是可执行代码了,但因为只是整个项目的一部分,因此咱们还不能直接运行。待全部的源文件的编译都大功告成,咱们就能够最后把这些半成品的目标文件“打包”成一个可执行文件了,这个工做由另外一个程序负责完成,因为此过程好像是把包含可执行代码的目标文件链接装配起来,因此又称为连接(Link),而负责连接的程序就叫……就叫连接程序(Linker)。连接程序除了连接目标文件外,可能还有各类资源,像图标文件啊、声音文件啊什么的,还要负责去除目标文件之间的冗余重复代码,等等,因此……也是挺累的。连接完成以后,通常就能够获得咱们想要的可执行文件了。 

上面咱们大概地介绍了编译型语言的特色,如今再看看解释型。噢,从字面上看,“编译”和“解释”的确都有“翻译”的意思,它们的区别则在于翻译的时机安排不大同样。打个比方:假如你打算阅读一本外文书,而你不知道这门外语,那么你能够找一名翻译,给他足够的时间让他从头至尾把整本书翻译好,而后把书的母语版交给你阅读;或者,你也马上让这名翻译辅助你阅读,让他一句一句给你翻译,若是你想往回看某个章节,他也得从新给你翻译。 

两种方式,前者就至关于咱们刚才所说的编译型:一次把全部的代码转换成机器语言,而后写成可执行文件;然后者就至关于咱们要说的解释型:在程序运行的前一刻,还只有源程序而没有可执行程序;而程序每执行到源程序的某一条指令,则会有一个称之为解释程序的外壳程序将源代码转换成二进制代码以供执行,总言之,就是不断地解释、执行、解释、执行……因此,解释型程序是离不开解释程序的。像早期的BASIC就是一门经典的解释型语言,要执行BASIC程序,就得进入BASIC环境,而后才能加载程序源文件、运行。解释型程序中,因为程序老是以源代码的形式出现,所以只要有相应的解释器,移植几乎不成问题。编译型程序虽然源代码也能够移植,但前提是必须针对不一样的系统分别进行编译,对于复杂的工程来讲,的确是一件不小的时间消耗,何况极可能一些细节的地方仍是要修改源代码。并且,解释型程序省却了编译的步骤,修改调试也很是方便,编辑完毕以后便可当即运行,没必要像编译型程序同样每次进行小小改动都要耐心等待漫长的Compiling…Linking…这样的编译连接过程。不过凡事有利有弊,因为解释型程序是将编译的过程放到执行过程当中,这就决定了解释型程序注定要比编译型慢上一大截,像几百倍的速度差距也是不足为奇的。 

编译型与解释型,二者各有利弊。前者因为程序执行速度快,同等条件下对系统要求较低,所以像开发操做系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object   Pascal(Delphi)、VB等基本均可视为编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不一样系统平台间的兼容性有必定要求的程序则一般使用解释性语言,如Java、JavaScript、VBScript、Perl、Python等等。 

但既然编译型与解释型各有优缺点又相互对立,因此一批新兴的语言都有把二者折衷起来的趋势,例如Java语言虽然比较接近解释型语言的特征,但在执行以前已经预先进行一次预编译,生成的代码是介于机器码和Java源代码之间的中介代码,运行的时候则由JVM(Java的虚拟机平台,可视为解释器)解释执行。它既保留了源代码的高抽象、可移植的特色,又已经完成了对源代码的大部分预编译工做,因此执行起来比“纯解释型”程序要快许多。而像VB6(或者之前版本)、C#这样的语言,虽然表面上看生成的是.exe可执行程序文件,但VB6编译以后实际生成的也是一种中介码,只不过编译器在前面安插了一段自动调用某个外部解释器的代码(该解释程序独立于用户编写的程序,存放于系统的某个DLL文件中,全部以VB6编译生成的可执行程序都要用到它),以解释执行实际的程序体。C#(以及其它.net的语言编译器)则是生成.net目标代码,实际执行时则由.net解释系统(就像JVM同样,也是一个虚拟机平台)进行执行。固然.net目标代码已经至关“低级”,比较接近机器语言了,因此仍将其视为编译语言,并且其可移植程度也没有Java号称的这么强大,Java号称是“一次编译,处处执行”,而.net则是“一次编码,处处编译”。呵呵,固然这些都是题外话了。总之,随着设计技术与硬件的不断发展,编译型与解释型两种方式的界限正在不断变得模糊。

 

动态语言和静态语言
一般咱们所说的动态语言、静态语言是指动态类型语言和静态类型语言。

(1)动态类型语言:动态类型语言是指在运行期间才去作数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其余的各类脚本语言如VBScript也多少属于动态类型语言。

(2)静态类型语言:静态类型语言与动态类型语言恰好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明全部变量的数据类型,C/C++是静态类型语言的典型表明,其余的静态类型语言还有C#、JAVA等。

 

强类型定义语言和弱类型定义语言

(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,若是不通过强制转换,那么它就永远是这个数据类型了。举个例子:若是你定义了一个整型变量a,那么程序根本不可能将a看成字符串类型处理。强类型定义语言是类型安全的语言。

(2)弱类型定义语言:数据类型能够被忽略的语言。它与强类型定义语言相反, 一个变量能够赋不一样数据类型的值。

强类型定义语言在速度上可能略逊色于弱类型定义语言,可是强类型定义语言带来的严谨性可以有效的避免许多错误。另外,“这门语言是否是动态语言”与“这门语言是否类型安全”之间是彻底没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。

 

经过上面这些介绍,咱们能够得出,python是一门动态解释性的强类型定义语言。

 

参考:

廖雪峰的官网  

金角大王的博客

相关文章
相关标签/搜索