一、Python介绍
Python是一种面向对象的解释型的计算机程序设计语言,在1989年圣诞节期间,吉多·范罗苏母(Guido van Rossum)为了打发圣诞节的无聊时间,决定开发一个新的脚本解释程序,作为ABC语言的一种继承。
在2017年7月的TIOBE排行榜中,Python已经赶超了C#和PHP位列第四位,Python语言简洁,优美,明晰,是一款优秀并广泛使用的语言。

Python可以应用在许多方面,例如:数据分析,WEB开发,图像处理,数值计算等众多领域。目前国内外中大型互联网企业都在使用Python,比如:Youtube,豆瓣,知乎,Google,Facebook等。
二、Python是一门什么样的语言?
编程语言可以从以下几个角度进行分类:①编译型和解释型,②动态语言和静态语言,③强类型定义语言和弱类型定义语言,④低级语言和高级语言。
⒈编译型和解释型
编译器的原理是把每一条语句都编译成计算机语言,并且保存为二进制文件,这样在程序运行时计算机可以以机器语言来运行此文件,速度极快。
解释器的原理是在程序执行时,将一条一条语句解释后交给计算机来执行,所以在运行速度方面是没有编译后的程序运行速度快的。这是因为计算机并不能直接识别我们所写的语句,计算机只能认识机器语言(01)。
举个例子:好比两个语言不通的人对话,编译型语言是在一个人全部内容结束后,翻译经过翻译再交给另外一个人,而解释型语言则为同声传译(说一句翻译一句),速度肯定是不如前者的。

编译是将源程序翻译成可以执行的目标代码,翻译与解释是分开执行的;而解释是对源程序的翻译与执行一次性完成的。二者最大的区别在于:对解释器执行而言,程序运行时的控制权在解释器而不再用户程序;对编译执行而言,运行时的控制权在用户程序。
编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只需要做一次,运行时不需要编译,所以编译型语言的程序执行效率高,可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,在不同的操作系统之间移植会存在问题,需要根据运行的操作系统环境来编译不同的可执行文件。
解释型:
优点:有良好的平台兼容性,在任何环境中都可以运行(安装了虚拟机),移植的时候灵活,修改代码的时候直接修改就可以,可以快速部署。
缺点:每次运行的时候都需要解释一遍,性能上不如编译性语言,安全性能上不如编译型语言。
⒉动态语言和静态语言
⑴动态语言:动态语言是指在运行期间才去做数据检查的语言。也就是说,在使用动态类型的语言编程时,永远也不需要给任何变量指定数据的类型,该语言会在你第一次给变量赋值时将变量的数据类型记录下来。Python是一种典型的动态类语言。
⑵静态语言:静态语言与动态语言刚好相反,它的数据类型是在编译期间检查的,也就是说在写程序时要声明所有的变量的数据类型,C和C++是静态语言的典型代表,其他的静态语言还有java,C#等。
⒊强类型定义语言和弱类型定义语言
⑴强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么这个变量就永远都是该数据类型了。例如:定义了一个整型变量sakura,那么程序不会将sakura当作字符串类型来处理。强类型定义语言是类型安全的语言,在一定程度上,强类型定义语言的严谨性能够避免许多错误。
⑵弱类型定义语言:数据类型可以被忽略的语言,与强类型定义语言恰好相反,不同的数据类型可以赋给同一个变量。
⒋低级语言与高级语言
⑴低级语言:最初的计算机程序都是用0和1的序列来表示的,程序员直接使用的是机器指令,无需翻译。后来为了方便记忆,就将0和1的序列表示的机器指令都用符号来助记,这些与机器指令一一对应进而形成了汇编指令,从而诞生了汇编语言。无论是机器指令还是汇编语言都是面向机器的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器的。
⑵高级语言:高级语言是从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高,需要经过编译呈特定机器上的目标代码才可执行。一条高级语言的语句往往需要若干条机器指令来完成。高级语言独立于机器的特性,是靠编译器为不同的机器生成不同的目标代码(或机器指令)来实现的。所以说高级语言不依赖于机器,是指在不同的机器或者平台上高级语言的程序本身不变,而通过编译器编译得到的目标代码去适应不同的机器。
通过上面的这些介绍,我们可以得出结论:Python是一门动态解释型的强类型定义语言,是一门面向用户的高级语言。
三、Python的优缺点
⒈Python的优点
①Python的定位是优雅,明确,简单,所以Python程序看上去非常简单易懂,对刚接触编程语言的人来说,不但入门容易,而且将来深入下去也能够编写非常复杂的程序。
②开发效率高。Python拥有非常强大的第三方库,,Python官方库里都有相应的模块进行支持,直接调用下载后,在基础库上再进行开发,能够大大降低开发周期,避免造轮子。
③高级语言——Python是面向用户的语言,当你使用Python编写程序时,无需考虑如何管理你的程序使用内存一类的底层细节。
④可移植性——基于Python开源的特性,Python已经移植到许多平台上,经过改动使它能够在不同的平台上进行工作。如果你在编写代码的时候避免使用过于依赖系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行。
⑤可扩展性——如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用c或者C++编写,然后在你的Python程序中使用他们。
⑥可嵌入性——你可以把Python嵌入到你的C/C++程序,从而向你的程序用户提供脚本功能。
⒉Python的缺点
①速度慢,Python的运行速度与C相比确实要慢很多,与java相比也要慢一些,但是这里的运行速度慢在大多数情况下用户是无法感知的,必须借助某些测试工具进行测试才能够体现出来。比如你运用C运行一个程序花费了0.01秒,而用Python是0.1秒,这样C比Python运行速度是Python的10倍,但是这个时间是正常人无法感知到的。在绝大多数情况下,Python已经完全能够满足对程序速度的要求。
②代码不能加密,因为Python是解释型语言,它们的源码都是以明文的形式存放的。
③线程不能利用CPU多核的优势。由于全局解释器锁GIL(Global Interpreter Lock)的存在,禁止多线程的并行执行。
任何一门语言都不是完美的,都有擅长和不擅长的部分,没必要拿一门语言的劣势去跟另一门语言的优势来比较,比如三角尺和圆规,在大部分情况下多个工具互相配合才能让工作完成得更好。
四、Python解释器
当我们编写Python代码时,我们所得到的是一个包含Python代码的以.py为扩展名的文件,要运行这段代码就需要靠Python解释器去执行这个.py文件。以下是常见的Python解释器:
CPython
在Python官网下载并安装好Python就获得了一个官方版本的解释器:CPython,这个解释器是用C语言来开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广的Python解释器。
PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用的是JIT技术,对Python代码进行动态编译(不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会拥有不同的结果。如果代码要放到PyPy下执行,就需要了解PyPy与CPython的不同点。
IPython
IPython是基于CPython之上的一个交互式解释器。也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但是内核都调用了Chrome内核。
Jython
Jython是在java平台上运行的解释器,可以直接把Python代码编译成java字节码执行。
IronPython
IronPython和Jython类似,只不过IronPython是运行在.net平台上的Python解释器,可以直接把Python代码编译成.net字节码。
小结:Python的解释器有很多,但是应用最广泛的还是CPython。如果要和java或者是.net平台交互,最好的办法不是使用Jython或者IronPyhoin,而是通过网络调用来交互,确保各程序之间的独立性。
五、字符编码
Python解释器在加载.py文件中的代码时,会对内容进行编码。
ASCII码(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要是用于显示现代化英语以及其他西欧语言,最多只能用8位(一个字节)来表示,所以ASCII最多只能表示255个符号。

但是这时候又出现了一个问题:中文那么多汉字,能够编码的符号太少怎么办?为了解决这个问题,程序员设计了适用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了445个字符,包括6763个汉字和682个其他符号。
GB2312支持的汉字太少,1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字包括21003个字符。
GB18030是去带GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、维吾尔文等主要少数民族的文字。现在的PC平台必须支持GB18030,对嵌入式产品不作要求。所以手机、MP3一般只支持GB2312(在电脑上的一段文字在手机上显示可能乱码)。
从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的。即同一个字符在这些方案中总是有相同的编码,后面支持的标准支持更多的字符。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码,万国码,单一码)是一种在计算机上使用的字符编码。Unicode是为了解决传统的字符编码方案的局限而产生,它是为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定现有的字符和符号最少有16位来表示(2个字节,有可能更多)
UTF-8,是对Unicode编码的压缩和优化,它不再使用最少两个字节,而是将所有字符和符号进行分类:ASCII码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存,依此类推。
所以,Python解释器在加载.py文件中的代码时,会对内容进行编码。Python使用的是UTF-8
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 print "你好,世界!"
浙公网安备 33010602011771号