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