Python介绍

Posted yao931104

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python介绍相关的知识,希望对你有一定的参考价值。

Python介绍


python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。

Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。

 

目前Python主要应用领域:

· 云计算: 云计算最火的语言,典型应用OpenStack

· WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣……。典型WEB框架有Django

· 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys, pandas

· 系统运维: 运维人员必备语言

· 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于C, C++, java,尤其擅长策略回测

· 图形GUI: PyQT, WxPython,TkInter

 

Python在一些公司的应用:

· 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、Google广告等项目都在大量使用Python开发

· CIA:美国中情局网站就是用Python开发的

· NASA:美国航天局(NASA)大量使用Python进行数据分析和运算

· YouTube:世界上最大的视频网站YouTube就是用Python开发的

· Dropbox:美国最大的在线云存储网站,全部用Python实现,每天网站处理10亿个文件的上传和下载

· Instagram:美国最大的图片分享社交网站,每天超过3千万张照片被分享,全部用python开发

· Facebook:大量的基础库均通过Python实现的

· Redhat:世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的

· 豆瓣:公司几乎所有的业务均是通过Python开发的

· 知乎:国内最大的问答社区,通过Python开发(国外Quora)

· 春雨医生:国内知名的在线医疗网站是用Python开发的

· 除上面之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各种各样的任务。


 

计算机语言类型


众所周知,最底层的语言为机器语言,其次是汇编语言,然后就是普遍被使用的高级语言。而这些高级语言中又分为编译型、解释型、动态类型、静态类型、强类型定义、弱类型定义等等。下面就分析一下各种语言和类型。

 

机器语言

由于计算机智能识别二进制代码,因此,所有的计算机指令都是以二进制代码格式编写的。全部机器指令的集合构成了机器语言,通过机器语言编程的程序被称为目标程序,只有目标程序才能被计算机直接识别和执行。但是机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大,机器语言属于最底层的低级语言。

目前存在着多至100000种机器语言的指令,尽管机器语言指令众多、复杂,但仍然是有规律的。以下给出一些示例:

指令部份的示例:

0000 代表 加载(LOAD)

0001 代表 存储(STORE)

...

暂存器部份的示例:

0000 代表暂存器 A

0001 代表暂存器 B

...

 

汇编语言

汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。但汇编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指令的方法,那就是交叉汇编技术

 

高级语言

与机器语言和汇编语言不同,高级语言是从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高。高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。但是高级语言所编制的程序并不能直接被计算机识别,必须经过一个转换过程变为机器语言才能被计算机是被运行。由此出现了高级语言中最主要的两种分类方式:编译型和解释型。

编译型语言

编译是指在应用源程序执行之前,就将程序源代码通过编译器(compiler)转换成机器语言,这一过程叫做编译(compile)。如果我们的源代码只包含在一个源文件中,那么编译后就会直接生成一个可执行文件。但是,一个复杂的项目一般会细分成很多板块、部分,这些板块、部分又分别由很多源代码别写而成,这些源文件经过编译后生成目标文件(object file),单一的目标文件是不能运行的,待组成项目的所有源文件编译成功后,将生成的所有目标文件链接装配起来,最终形成可执行文件。这个链接过程就叫做链接(link),负责链接的软件叫做(linker)。简单来讲就是一次编译反复使用,且编译完后的可执行文件直接就是计算机可以理解的二进制代码,运行速度快,对系统要求低。不过一旦程序需要修改,再修改完源代码后需要重新编译,且编译的程序不能直接移植到不同的系统。如:C语言、C++语言等。

解释型语言

与编译型不同,可执行文件直接由一段完整的源代码编写。在计算机运行这个程序时,通过名为解释器(interpreter)的外壳程序将源代码转换成二进制代码供计算机执行。并且需要执行哪个命令就解释哪段源代码。解释型程序省略了编译的过程,实则将编译放在执行程序的过程中。这使得程序员对程序进行修改以及在程序中插入良好的调试诊断信息等变得容易。由于解释型语言自身的特性使得其具有良好的动态特性和可移植性,只要将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行,且解释型程序开发速度快,修改调试方便,同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。如Java语言、Python语言等。

动态类型、静态类型、强类型定义、弱类型定义等等这些类型是从其他角度来定义的。

动态类型语言和静态类型语言

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

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

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

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

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

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

 

总结

机器语言:优点是最底层,运行速度最快,缺点是最复杂,开发效率最低。

汇编语言:优点是底层,速度最快,缺点是复杂,开发效率低。

高级语言:编译型语言执行速度快,不依赖语言环境运行,对系统要求低,但是开发效率相对较低,不易修改调试,跨平台性差。

              解释型语言有良好的平台兼容性,开发效率高,易修改调试,但执行速度慢,依赖语言环境运行,对系统要求相对高些。


 

Python发展史


  • 1989年,Guido开始写Python语言的编译器。
  • 1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。
  • Granddaddy of Python web frameworks, Zope 1 was released in 1999
  • Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
  • Python 2.0 - October 16, 2000,加入了内存回收机制,构成了现在Python语言框架的基础
  • Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 诞生
  • Python 2.5 - September 19, 2006
  • Python 2.6 - October 1, 2008
  • Python 2.7 - July 3, 2010
  • In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
  • Python 3.0 - December 3, 2008 (这里要解释清楚 为什么08年就出3.0,2010年反而又推出了2.7?是因为3.0不向下兼容2.0,导致大家都拒绝升级3.0,无奈官方只能推出2.7过渡版本)
  • Python 3.1 - June 27, 2009
  • Python 3.2 - February 20, 2011
  • Python 3.3 - September 29, 2012
  • Python 3.4 - March 16, 2014
  • Python 3.5 - September 13, 2015
  • Python 3.6 - 2016-12-23 发布python3.6.0版

那应该使用Python2.x还是Python3.x呢?这里借用官网给出的一段解释:

Python 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement of extended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x is under active development and has already seen over five years of stable releases, including version 3.3 in 2012, 3.4 in 2014, and 3.5 in 2015. This means that all recent standard library improvements, for example, are only available by default in Python 3.x.

由于Python2.x只支持到2020年,而现在已经2019年了,还有什么理由不用Python3.x呢?


 

Python的优缺点


跟据语言特点,Python属于解释型、动态类型、强类型定义语言。那么Python具有的优点是:

  1. Python创建指出的理念就是功能全面,易学易用,可拓展性,所以Python的程序看上去简单明了,对初学者而言容易入门。
  2. Python作为高级语言,不需要使用者考虑过多的底层实现细节,降低入门门槛。
  3. Python作为解释型语言,可以大大缩短开发周期、开发效率高,并且Python有非常强大的第三方库,几乎可以满足你的全部需求,可以直接下再调用。
  4. 由于Python的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行。
  5. Python具有可扩展性,如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
  6. Python具有可嵌入性,你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

当然Python同时也有很多缺点:

  1. 运行速度慢。Python跟编译型语言如C语言相比,速度确实要慢很多,甚至比同是解释型的Java语言都要慢,但是这只是从测试角度出发的。通过专业测试软件测试,Python运行一个软件需要的时间可能是0.1s,而C语言运行这个软件的速度可能要比Python快十倍到几十倍。虽然看起来很夸张,但是放到用户层面就没有那么夸张了,绝大多数用户可能都感觉不到那么细微的差别。Python基本已经可以满足你对程序速度的要求了,除非是对速度要求非常高的搜索引擎之类,不建议用Python。
  2. 代码不能加密,因为Python是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
  3. 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点。

当然,Python还有很多小问题,这里就不多说了。没有哪种语言是完美的,每种语言都有其优点和缺点,随着你对Python了解的深入,你会喜欢上这门语言的。


 

Python解释器


当我们编写Python代码时,我们得到的是一个包含Python代码的以 .py 为扩展名的文本文件。要运行代码,就需要Python解释器去执行 .py 文件。由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

CPython

当我们从Python官方网站下载并安装好Python后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行Python就是启动CPython解释器。CPython是使用最广的Python解释器。

IPython

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

CPython用 >>> 作为提示符,而IPython用 In [序号]:  作为提示符。

PyPy

PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点

Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython

IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码

Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。


以上是关于Python介绍的主要内容,如果未能解决你的问题,请参考以下文章

python第一篇-------python介绍

Python基础:Python入门介绍

python - day01 介绍

python学习——python介绍

Python介绍

python介绍