Python的历史

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

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

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

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

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

- 除法运算符`/`在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`（不涉及`map`或`filter`）从内建名字空间移动至`functools`，理由是使用`reduce`的代码不如使用循环和累加器变量的代码好读。
- 多个模块被改名（根据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`包内。

## 版本列表

### 各阶段之版本

编号版本之前的版本：

- 开始实施 - 1989年12月
- CWI的内部版本 - 1990

版本｜最新微版本｜发布日期｜完全支援结束｜安全修复结束

o｜0.9.9｜1991-02-20｜1993-07-29

o｜1.0.4｜1994-01-26｜1994-02-15

o｜1.1.1｜1994-10-11｜1994-11-10

o｜1995-04-13｜Unsupported

o｜1995-10-13｜Unsupported

o｜1996-10-25｜Unsupported

o｜1.5.2｜1998-01-03｜1999-04-13

o｜1.6.1｜2000-09-05｜2000-09

o｜2.0.1｜2000-10-16｜2001-06-22

o｜2.1.3｜2001-04-15｜2002-04-09

o｜2.2.3｜2001-12-21｜2003-05-30

o｜2.3.7｜2003-06-29｜2008-03-11

o｜2.4.6｜2004-11-30｜2008-12-19

o｜2.5.6｜2006-09-19｜2011-05-26

o｜2.6.9｜2008-10-01｜2010-08-24｜2013-10-29

o｜2.7.18｜2010-07-03｜2020-01-01

o｜3.0.1｜2008-12-03｜2009-06-27

o｜3.1.5｜2009-06-27｜2011-06-12｜2012-04-06

o｜3.2.6｜2011-02-20｜2013-05-13｜2016-02-20

o｜3.3.7｜2012-09-29｜2014-03-08｜2017-09-29

o｜3.4.10｜2014-03-16｜2017-08-09｜2019-03-18

o｜3.5.10｜2015-09-13｜2017-08-08｜2020-09-30

o｜3.6.15｜2016-12-23｜2018-12-24｜2021-12-23

o｜3.7.17｜2018-06-27｜2020-06-27｜2023-06-27

o｜3.8.20｜2019-10-14｜2021-05-03｜2024-10-07

o｜3.9.25｜2020-10-05｜2022-05-17｜2025-10-31

3.10.20｜2021-10-04｜2023-04-05｜2026-10

3.11.15｜2022-10-24｜2024-04-02｜2027-10

3.12.13｜2023-10-02｜2025-04-08｜2028-10

3.13.14｜2024-10-07｜2026-10｜2029-10

c｜3.14.6｜2025-10-07｜2027-10｜2030-10

p｜3.15.0｜2026-10-01｜2028-10｜2031-10

表注:

## 参阅

- 软件工程史
- 阿米巴操作系统(Amoeba/阿米巴操作系统)
- Python语法及语义

## 外部链接

- Guido Van Rossum blog on Python's History