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,提供系統呼叫中斷時自動重試的支援。
- PEP479,
StopIteration
異常改在生成器內部處理。現在如果生成器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 locale
是POSIX locale
(C locale
)時,sys.stdin
和sys.stdout
用surrogateescape
錯誤處理器,不再使用strict
錯誤處理器。
標準庫重要優化
- collections.OrderedDict用C重寫,速度提高4-100倍。
- ssl模組支援 Memory BIO
- 新增
os.scandir()
函式。 functools.lru_cache()
用C重寫,效能大大提升。- 新函式
subprocess.run()
使執行subprocesses
更快。 - traceback模組優化,效能更高,對開發者更加友好。
安全優化
- 標準庫禁用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,這個世界就完美了 :)。