python3.7 的新特性

Python 3.7增添了衆多新的類,可用於數據處理、針對腳本編譯和垃圾收集的優化以及更快的異步I/O。python

Python這種語言旨在使複雜任務變得簡單,最新版本Python 3.7已正式進入測試版發佈階段。Python 3.7的最終版定於2018年6月發佈,但此後不會爲Python 3.7版本添加任何新功能。正則表達式

Python 3.7最重要的添加和改進之處包括以下:數據庫

用類處理數據時減小樣板代碼的數據類。編程

一處可能沒法向後兼容的變動涉及處理生成器中的異常。框架

面向解釋器的「開發模式」。異步

具備納秒分辨率的時間對象。async

環境中默認使用UTF-8編碼的UTF-8模式。函數

觸發調試器的一個新的內置函數。工具

Python數據類性能

衆所周知,Python是處理結構化數據的一種快捷又方便的方法。Python提供了用來組織管理結構,並將常見行爲與數據實例聯繫起來的類,可是擁有許多初始化器的類從來存在這個弊端:須要大量的樣板代碼爲它們建立實例。好比說:

爲了使這實現自動化:爲類建立實例,Python 3.7引入了一個新的模塊dataclasses,如PEP 557中所述(https://www.python.org/dev/peps/pep-0557/)。它提供了一個裝飾器,可以以異常簡單的方式重現上述行爲:

於是生成的類運行起來如同普通的Python類。你還能夠聲明某些字段是「凍結」或不可變的,而且使建立屬性的特殊方法(好比__hash__或__repr__)實現自動化(或手動覆蓋)。

在學習中有迷茫不知如何學習的朋友小編推薦一個學Python的學習q u n 227  -435-  450能夠來了解一塊兒進步一塊兒學習!免費分享軟件視頻資料

Python生成器異常處理

正如PEP 479中概述(https://www.python.org/dev/peps/pep-0479/),開發了一段時間的一處變動旨在讓人們更容易調試Python生成器引起的StopIteration異常。之前,生成器遇到另外一個問題時很容易引起StopIteration,而不是因爲它用完了須要迭代的東西。這帶來了一整批很難追蹤的代碼缺陷。

在Python 3.7中,生成器引起StopIteration異常後,StopIteration異常將被轉換成RuntimeError異常,那樣它不會悄悄一路影響應用程序的堆棧框架。這意味着如何處理生成器的行爲方面不太敏銳的一些程序會在Python 3.7中拋出RuntimeError。而在Python 3.6中,這種行爲生成一個棄用警告;在Python 3.7中,它生成一個完整的錯誤。

一個簡易的方法是使用try/except代碼段,在StopIteration傳播到生成器的外面捕獲它。更好的解決方案是從新考慮如何構建生成器――好比說,使用return語句來終止生成器,而不是手動引起StopIteration。想進一步瞭解如何在現有代碼中補救這個問題,如何在新代碼中防範該問題,請參閱PEP 469(https://www.python.org/dev/peps/pep-0479/)。

Python開發模式

Python解釋器新的命令行開關:-X讓開發人員能夠爲解釋器設置許多低級選項。在Python 3.7中,選項-X dev啓用「開發模式」,這種運行時檢查機制一般對性能有重大影響,但在調試過程當中對開發人員頗有用。

-X dev激活的選項包括:

asyncio模塊的調試模式。這爲異步操做提供了更詳細的日誌記錄和異常處理,而異常操做可能很難調試或推理。

面向內存分配器的調試鉤子。這對於編寫CPython擴展件的那些人頗有用。它可以實現更明確的運行時檢查,瞭解CPython如何在內部分配內存和釋放內存。

啓用faulthandler模塊,那樣發生崩潰後,traceback始終轉儲出去。

具備納秒分辨率的Python時間函數

Python 3.7中一類新的時間函數返回納秒精度的時間值。儘管Python是一種解釋型語言,可是Python的核心開發人員維克多•斯廷納(Victor Stinner)主張報告納秒精度的時間。最主要的緣由是,在處理轉換其餘程序(好比數據庫)記錄的時間值時,能夠避免丟失精度。

新的時間函數使用後綴_ns。好比說,time.process_time()的納秒版本是time.process_time_ns()。請注意,並不是全部的時間函數都有對應的納秒版本,由於其中一些時間函數並不得益於此。

Python UTF-8模式

Python一直支持UTF-8,以便輕鬆處理字符串和文本。可是周圍環境中的語言環境(locale)有時還是ASCII,而不是UTF-8,檢測語言環境的機制並不老是很可靠。

Python 3.7添加了所謂的「UTF-8模式」,可經過-X命令行開關啓用該模式,該模式假設UTF-8是環境提供的語言環境。在POSIX語言環境中,UTF-8模式默認狀況下已被啓用,但在其餘位置默認狀況下被禁用,以避免破壞向後兼容。值得試一試在默認狀況下開啓UTF-8模式,但不該該在生產環境下啓用它,除非你確信Python與周圍環境的全部交互都使用UTF-8。

內置breakpoint()函數

Python隨帶內置的調試器,不過它也能夠連入到第三方調試工具,只要它們能與Python的內部調試API進行對話。不過,Python到目前爲止缺乏一種從Python應用程序裏面以編程方式觸發調試器的標準化方法。

Python 3.7添加了breakpoint(),這個內置函數使得函數被調用時,讓執行切換到調試器。相應的調試器不必定是Python本身的pdb,能夠是以前被設爲首選調試器的任何調試器。之前,調試器不得不手動設置,而後調用,於是使代碼更冗長。而有了breakpoint(),只需一個命令便可調用調試器,而且讓設置調試器和調用調試器涇渭分明。

其餘新的Python 3.7功能

Python 3.7有另外的衆多變動。下面是你在使用最新版本的Python時可能會遇到的其餘一些功能:

面向線程本地存儲支持的C-API

PEP 539中描述(https://www.python.org/dev/peps/pep-0539/),線程特定存儲(TSS)API取代了老式的線程本地存儲(TLS)API。若是誰定製CPython或編寫使用解釋器的內部API的CPython擴展件,就要明白這一點。

模塊屬性訪問定製

你在Python程序中建立模塊時,如今能夠針對該模塊的實例定製屬性訪問的行爲。爲此,只須要在模塊裏面建立一個__getattr__方法,就跟爲一個類建立方法那樣。這樣一來,就能夠對諸如請求模塊裏面不存在的函數或方法之類的操做進行攔截、標記或代理。

Python importlib資源

importlib模塊如今可用來讀取「資源」,即隨Python應用程序一併交付的二進制工件,好比數據文件。這樣一來,開發人員能夠經過importlib的抽象來訪問那些文件,因此它們存儲在系統上某個地方的.zip文件中仍是存儲在目錄中並不重要。

底層優化

如今許多單獨的操做更快速了:

因爲新的操做碼,方法調用起來最多快20%。(除非你在編寫直接處理Python操做碼的代碼,不然不須要擔憂由此帶來的影響。)

正則表達式中不區分大小寫的匹配速度更快了,有時要快20倍。

源代碼中的一些常量如今能夠更高效地優化。

相關文章
相關標籤/搜索