Python的歷史
来自维基百科,自由的百科全书
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]
版本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
包内。
版本列表
此条目或章节需要時常更新。有關事物或許會隨著時間而有所變化。 |
註釋
參閲
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.