前言
在介绍python前,先来理清以下概念
1.机器语言和高级语言
计算机硬件只能理解一种非常低级的编程语言,称为机器语言(二进制代码)。
比如,让计算机对两个数作求和操作,cpu可能要执行以下指令:
(1)将位于内存空间位置在2001的数加载到cpu中
(2)再将位于内存空间位置在2002的数也加载到cpu中
(3)在cpu中,对这两个数作求和操作
(4)将结果存储在位置为2003的内存空间
可想而知,使用机器语言会多么复杂了。
而如果使用python这样的高级语言,对两个数求和可以很自然的用c=a+b表示,但由此带来的问题是,我们需要设计一种方法,将高级语言翻译成计算机可以执行的机器语言,有两种方法可以实现,分别是使用编译器和解释器。
使用编译器将自身转换成机器语言的高级语言,通常称为编译型语言;而使用解释器将自身转换成机器语言的高级语言,称为解释型语言,python就是解释性语言的一种。
编译型语言:
(1)如C,C++,汇编等,将所有源代码一次性转换成二进制指令,生成一个可执行程序(windows下的.exe)。
(2)可执行程序里面包含的就是机器码,只要我们拥有可执行程序,就可以随时运行,不用再重新编译了,也就是“一次编译,无限次运行”。
(3)在运行的时候,我们只需要编译生成的可执行程序,不再需要源代码和编译器了,所以说编译型语言可以脱离开发环境运行。
(4)编译型语言一般是不能跨平台的,也就是不能在不同的操作系统之间随意切换。不能跨平台表现在以下两个方面。
第一:源代码不能跨平台,不同平台支持的函数、类型、变量等都可能不同,基于某个平台编写的源代码一般不能拿到另一个平台下编译。
第二:可执行程序不能跨平台,不同操作系统对可执行文件的内部结构有着截然不同的要求,彼此之间也不能兼容。
解释型语言:
(1)如python、JavaScript、php、shell、matlab等,一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序。
(2)由于每次执行程序都需要重新转换源代码,所以解释型语言的执行效率天生就低于编译型语言,甚至存在数量级的差距。计算机的一些底层功能,或者关键算法,一般都使用C/C++实现,只有在应用层面(比如网站开发、批处理、小工具等)才会使用解释型语言。
(3)解释型语言几乎都能跨平台,“一次编写,到处运行”,这是因为有了解释器这个中间层。在不同的平台下,解释器会将相同的源代码转换成不同的机器码,解释器帮助我们屏蔽了不同平台之间的差异。
python的优点
1. 虽然python易于使用,但它却是一门完整的编程语言。与shell脚本或批处理文件相比,它为编写大型程序提供了更多的结构和支持。与C相比,python提供了比C更多的错误检查,并且作为一门高级语言,它有高级的内置数据类型,例如:灵活的数组和字典。因其更多的通用数据类型,python比Awk甚至Perl都适应于更多问题领域,至少大多数事情在python中与其他语言同样简单。
2. python允许将程序分割为不同的模块,以便在其他的python程序中重用。它内置了很多的标准模块,可以在此基础上开发程序,或者作为学习python编程的示例。这些模块提供了诸如文件输入输出、系统调用、套接字,甚至图形界面接口工具包比如Tk。
3. python是一种解释型语言,因为无需编译和链接,可以在程序开发中节省宝贵的时间。python解释器可以交互式使用,这样就可以方便的尝试语言特性、写一些一次性的程序或在自底向上的程序开发中测试功能,甚至还可以把它当作一个桌面计算器。
4. python程序的书写是紧凑而易读的。用python编写的程序通常比同样的C、C++或Java程序更短小,原因列举如下:
(1)高级数据结构允许在一个表达式中表示复杂的操作
(2)代码块的划分是按照缩进而不是成对的花括号
(3)变量或参数无需声明
5. python是可扩展的:如果会编写C语言程序,就能很容易的为解释器添加内置函数或模块,不论是让关键的程序以最高速度运行,还是将python程序链接到只提供预编译程序的库(比如硬件相关的图形库)。一旦真正链接上了,就能在python解释器中扩展或控制C语言编写的应用了。
注: 这个语言的名字来源于BBC的“Monty Python的飞行马戏团”节目,和爬行类动物没有任何关系。
python的缺点
1. 运行速度慢,python的运行速度几乎是最慢的,不但远远慢于C/C++,还慢于Java。但是速度慢的缺点往往也不会带来什么大问题,首先是计算机的硬件速度越来越快,多花钱就可以堆出高性能的硬件,硬件性能的提升可以弥补软件性能的不足。其次是有些应用场景可以容忍速度慢,比如网站,用户打开一个网页的大部分时间是在等待网络请求,而不是等待服务器执行网页程序。服务器花1ms执行程序,和花20ms执行程序,对用户来说是毫无感觉的,因为网络连接时间往往需要500ms甚至2000ms。
2. 代码加密困难,python直接运行源代码,因此对源代码加密比较困难。
补充
python 3和python 2区别
1.python 3中,print函数代替了print语句
python 2 中既可以使用print函数也可以使用print语句
print "3"
print(3)
python 3中只能使用print函数
print(3)
2.python 3默认使用UTF-8编码
python 2默认使用ASCII编码,python 3默认使用UTF-8编码,可以很好的支持中文或其他非英文字符。
3.python 3除法运算
python的除法运算包含2个运算符,分别是/和//。
对于/:
python 2中整数相除为整数,浮点数相除为浮点数。
>>>1/2
0
>>>1.0/2
0.5
python 3中整数、浮点数相除均为浮点数
>>>1/2
0.5
对于//:
python 2和python 3是一样的,均是向下取整。
>>>-1//2
-1
4.python 3异常
(1)在 python 2中,所有类型的对象都是直接被抛出的,但是在 python 3中,只有继承 BaseException 的对象才可以被抛出。
(2)在 python 2中,捕获异常的语法是“except Exception,var:”;但在 python 3中,引入了 as 关键字,捕获异常的语法变更为 “except Exception as var:”。
(3)在 python 3中,处理异常用 “raise Exception(args)”代替了“raise Exception,args”。
(4)python 3中,取消了异常类的序列行为和 .message 属性。
5.python 3不等于运算符
python 2中不等于运算符有两种:<> !=
>>>1!=2
True
>>>1<>2
True
python 3中只有!=这一种写法
>>>1!=2
True
6.python 3数据类型
(1)python 3去除了long类型,现在只有一种整形int。
(2)python 3新增了bytes类型
(3)python 3中,字典的keys()、items()和values()方法,返回迭代器,iterkeys()等函数被废弃,dict.has_key()被去掉,改为用in代替。