热门问题
时间线
聊天
视角
Python的歷史
来自维基百科,自由的百科全书
Remove ads
Python是在1980年代後期所構思出來的程式語言,[1]並於1989年12月[2]由荷蘭CWI的吉多·范羅蘇姆開始進行編程發展。Python繼承ABC程式語言的特性,能夠處理異常的狀況;並與阿米巴作業系統(Amoeba)互動運作。[3]范羅蘇姆是Python的主要編程者,他在決定Python發展方向等方面的持續核心作用當中扮演著重要的角色、這些分量都反映在Python社區給他的頭銜中;即是所謂的終身仁慈獨裁者。[4][5] (不過范羅蘇姆於2018年7月12日卸任Python研發的領導者[6])。Python一詞是以BBC電視節目蒙提·派森的飛行馬戲團之名名之。[7]


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]
Remove ads
版本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
(不涉及map
或filter
)從內建名字空間移動至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
包內。
Remove ads
版本列表
此條目或章節需要時常更新。有關事物或許會隨著時間而有所變化。 |
註釋
參閲
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads