Python的历史

来自维基百科,自由的百科全书

Python是在1980年代后期所构思出来的编程语言[1]并于1989年12月[2]荷兰CWI吉多·范罗苏姆开始进行编程发展。Python继承ABC编程语言的特性,能够处理异常的状况;并与阿米巴操作系统英语Amoeba (operating system)(Amoeba)交互运作。[3]范罗苏姆是Python的主要编程者,他在决定Python发展方向等方面的持续核心作用当中扮演着重要的角色、这些分量都反映在Python社区给他的头衔中;即是所谓的终身仁慈独裁者[4][5] (不过范罗苏姆于2018年7月12日卸任Python研发的领导者[6])。Python一词是以BBC电视节目蒙提·派森的飞行马戏团之名名之。[7]

Thumb
旧Python标识,1990年代–2006年
Thumb
新Python标识,2006年–目前

Python 2.0版于2000年10月16日发布的,具有许多主要的新特性,包括用于存储器管理的循环检测垃圾回收器(除了引用计数之外)以及对Unicode的支持。不过,Python最重要的变化是开发过程的本身,具有转向更加透明、以及Python社区强大的技术支持。[8]

Python 3.0版是一个主要的"向后不兼容"(backwards-incompatible)版本,经过长时间的测试之后,于2008年12月3日[9]发布。Python 3.0的许多主要功能也被向后移植到"向后兼容"(backwards-compatible)的Python 2.6以及2.7版本,尽管这种Python 3.0"向后移植"的方法目前不怎么受支持。[10]

版本3相对版本2的主要变化

Python3相较于Python2的变化主要在以下几个方面[11]

  • 除法运算符/在Python 3.x内总是返回浮点数。而在Python 2.6内会判断被除数与除数是否是整数。如果是整数会返回整数值,相当于整除;浮点数则返回浮点数值。要让Python 2.6统一返回浮点数值,可以from __future__ import division
  • print语句没有了,取而代之的是print()函数。可以使用2to3工具来自动转换。Python 2.6与Python 2.7部分地支持这种形式的print语法。Python 2.6要支持完全新的print()语法,可以from __future__ import print_function
  • 取消了exec语句,只剩下exec()函数。Python 2.6已经支持exec()函数。
  • 移除Python 2的input函数,并将raw_input函数重命名为input。Python 3的input函数表现得如同Python 2的raw_input函数,在其中输入总是作为字符串返回而非作为表达式求值。
  • 捕获异常的语法由except exc, var改为except exc as var。使用语法except (exc1, exc2) as var可以同时捕获多种类型的异常。Python 2.6已经支持这两种语法。
  • 如果两个对象之间没有定义明确的有意义的顺序。使用<, >, <=, >=比较它们会抛出异常。比如1 < ""在Python 2.6里面会返回True,而在Python 3.0里面会抛出异常。现在cmp(), instance.__cmp__()函数已经被删除。
  • 集合(set)的新写法:{1,2,3,4}。注意{}仍然表示空的字典(dict)。
  • long类型重命名为int类型,就是说只有一种整数类型,叫做int而表现得更像老式的long
  • 新的str类型表示一个Unicode字符串,相当于Python 2.x版本的unicode类型。而字节序列则用类似b"abc"的语法表示,用bytes类表示,相当于Python 2.x的str类型。现在两种类型不能再隐式地自动转换,因此在Python 3.x里"fish" + b"panda"是错误的。正确的写法是"fish" + b"panda".decode("utf-8")。Python 2.6可以自动地将字节序列识别为Unicode字符串,方法是from __future__ import unicode_literals
  • 八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。新增了一个bin()函数用于将一个整数转换成二进制字符串。Python 2.6已经支持这两种语法。
  • dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()不再返回列表,而是迭代器。
  • reduce(不涉及mapfilter)从内置命名空间移动至functools,理由是使用reduce的代码不如使用循环和累加器变量的代码好读[12]
  • 多个模块被改名(根据PEP8):_winreg → winreg,ConfigParser → configparser,copy_reg → copyreg,Queue → queue,SocketServer → socketserver,repr → reprlib。
  • StringIO模块现在被合并到新的io模块内。new, md5, gopherlib等模块被删除。Python 2.6已经支持新的io模块。
  • httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。

版本列表

注释

参阅

外部链接

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.