Python 3.5釋出:新增模組,效能優化,對開發者更友好

發表於2015-09-20

Python 3.5.0在9月13號正式釋出,與3.4相比,有哪些讓人期待的新特性呢?

  • PEP441,優化Python對zip壓縮包的支援。從2.6版本開始,Python支援將檔案或zip形式的壓縮包作為指令碼執行,對於有必要作為一個檔案釋出又複雜到要分模組管理的應用來說,這個功能很實用。但是這個功能卻鮮有人知,原因之一是當時沒有很好地宣傳,只在What’s New中提到,沒有寫到文件中;原因之二是Windows沒有為這種形式的檔案(.zip)提供相應地Python副檔名(類似.py)。所以這一次的版本中重新發布了這個特性,並且,定義.pyz.pyzw作為“Python的zip應用”和“Windows下Python Zip應用”的副檔名,並提供了一個簡單的管理工具。
  • PEP448,解包操作更加方便。*作為可迭代的解包操作符,**作為字典的解包操作符。list,tuple等資料結構通過解包操作會得到分散的物件,例如,*range(4), 4結果得到(0, 1, 2, 3, 4)
  • PEP461%操作符支援對位元組和位元組陣列的格式化。
  • PEP465,新增矩陣乘法運算子’@’。 a @ b表示矩陣a乘矩陣b,也支援a @= b
  • PEP471,新增os.scandir(),能夠快速遍歷目錄。
  • PEP475,提供系統呼叫中斷時自動重試的支援。
  • PEP479StopIteration異常改在生成器內部處理。現在如果生成器raise一個StopIteration,將會替換為RuntimeError。因為這個特性不能向前相容,所以最初是以__future__的形式釋出的。
  • PEP484,新增typing模組,型別註釋的新標準。支援通過def greeting(name: str) -> str:這種形式宣告函式,來註釋輸入和輸出地資料型別。
  • PEP485,新增math.isclose(),來判斷近似相等。
  • PEP486,優化Windows平臺對virtualenv的支援。在Windows中Python如果安裝了virtualenv或者多版本共存的話,需要配置直譯器的路徑來指定一個直譯器執行,但是並不會區分虛擬環境還是系統環境,如果使用pip等命令列,影響的還是系統環境。本PEP使系統能感受到“虛擬環境的存在”,也就說如果沒有特別指定直譯器,Windows中執行Python命令的時候會影響活躍的virtualenv,如果沒有,再呼叫預設的Python。
  • PEP488,不再使用.pyo檔名。擴充套件.pyc,如果新增優化引數,位元組碼檔案同目錄下生成.pyc將會使優化後的版本,檔案中會儲存優化級別。
  • PEP489,優化內建模組和擴充套件模組的載入。
  • PEP492,支援async/await語法的非同步協同。優化了Python的非同步,新增了awaitable object 、協程函式非同步迭代非同步上下文管理器等。

其他CPython的優化

  • LC_TYPE localePOSIX locale(C locale)時,sys.stdin 和sys.stdout 用surrogateescape錯誤處理器,不再使用strict錯誤處理器。

標準庫重要優化

安全優化

  • 標準庫禁用SSLv3.
  • HTTP cookie,解析更加嚴格,以阻止潛在的注入攻擊。

Windows優化

  • Windows新安裝器,替換MSI.
  • Windows構建以及擴充套件模組現在使用Microsoft Visual C++ 14.0。

反饋

  • redsymbol說,Python3變得越來越好了,他使用3比2多三年,並深深地愛上了Python3.有時候不得不用2.7,就會感覺從第五代工具回到了二代。 對此有人反駁說,是“從二代回到五代”吧,Python3沒有引數列表自解(parameter tuple unpacking by itself),用起來感覺非常不友好。orf對此回應:我用了7年多Python都不知道這玩意是什麼,也沒在程式碼中見過,移除難用的feature是一大進步,如果你接受不了的話,我很抱歉。Py3 is awesome.(跟帖中有一大堆關於這個feature的討論)
  • “你們搞的這個typing模組啊,excited!”ricw提到,這個模組解決了Python最大的軟肋,以後Python會變得越來越專業化。
  • ceronman說這是他最喜歡的3.X版本,Typing註釋模組,async/await,解包廣泛應用,這些功能都很贊,遺憾是PEP0498沒有趕上這個版本,期待3.6(原帖又是長長的對這一feature的討論).
  • 如果所有的東西都相容Py3,這個世界就完美了 :)。

相關文章