Python 3.0 beta 1 變化大,更簡潔、更統一
本文最初發表於賴勇浩(戀花蝶)的部落格(http://blog.csdn.net/lanphaday),如蒙轉載,敬請保留全文完整,切勿去除作者資訊。
Python 3.0 beta 1 在跳票了很短的一段時間後,在 6 月 18 號發布了,其實北京時間應該是 19 號了(下載:http://www.python.org/download/releases/3.0/)。因為是第一個 beta 版本,所以從 what’s new 上可以看出做了很多更改,跟之前的 alpha 版本有較大的不同。最大的特點在於完全依照了更簡潔、更統一的精神,修正了許多原有版本中遺留下來的缺陷。 win9x 算是走到了盡頭了,py3.0 b1 已經去除了 winsound 模組對 win9x 的支援。除此之外,b1 版本修正了幾十個 bugs。另外,值得一提的是產生器有了 gen.__name__ 屬性,就像函數的 func.__name__ 屬性一樣,enumerate() 多了一個 start 參考,顯然,這有一定的需要。 beta 1 的特色之一是許多標準模組以包的形式組織:比如 urllib 包,它包括了原來 urllib、urllib2、urlparse、robotparse等模組的內容;另外是多了一個 http 包,原來的 httplib 變成了 http.client,Cookie 變成 http.cookies,cookieslib變成了 http.cookiejar,而 HTTPServer 就成了 http.server;還多了 xmlrpc 包,包括了原來的 xmlrpclib 等模組;之前類似的 dbm、gdbm、dbhash等全部放入了建立立的 dbm 包裡面。怎麼樣,看起來是 pythonic 多了吧?之前的標準庫實在太亂了,全部亂亂地放在 libs 下,這樣整理一下非常有必要。 還有許多原來 python 版本和 C 版本庫,如 cStringIO 和 StringIO、pickle 和 cPickle、profile 與 cProfile 等都統一用 C 版本了,但保留了原來 python 版本的模組名,如 pickle。這種整理也非常必要,許多初學者不知道用哪個版本的好,許多模組功能一樣的,沒有必要給使用者太多選擇,給最好的就行了。 最後是 Queue 改名為 queue,ConfigParser 改名為 configparser,copy_reg 改名為 copyreg,_winreg 改名為 winreg。threading 模組的 API 也變得更另 pythonic了,可以預見 python 3.0 寫出來的代碼風格會更加統一,可讀性會更好。 直接去除了模組也非常多。比如處理 email 的 rfc822、mimetools;還有 htmllib 和 sgmllib。commands、multifile、sre、mhlib、fpformat、dircache、Canvas、user 和 mutex 等模組都被刪除啦,不過其中有些庫我都很少用到。還有跟 import 有關的 ihooks 和 imputil 模組也被刪除了,嗚嗚,我有代碼是用 imputil 的呀,還是改用 imp 好了,終究標準模組保險啊。 implement PEP 3138. repr() now returns printable Unicode characters unescaped, to get an ASCII-only representation of an object use ascii().Implement PEP 3121: new module initialization and finalization API.這是最新的兩個 PEP 實現,基本上無需要關注,當透明就好了。 對比前面幾個 alpha 版本,可以發現一些基礎設施如 bytes、int 和一些跟 unicode 有關的部分已經漸漸穩定下來,對於像itertools 中的 izip()、imap()替代 builtin 的 zip、map等語言特色的東西都已經完成,可以說核心進度頗佳。估計 beta 版本更多的是重新整理庫的組織形式、修 bug 和最佳化了。對於 py3.0,我覺得精彩可期啊!