您好,登錄后才能下訂單哦!
這篇文章主要介紹了python3.7新特性有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
Python 3.7增添了眾多新的類,可用于數據處理、針對腳本編譯和垃圾收集的優化以及更快的異步I/O。
Python這種語言旨在使復雜任務變得簡單,最新版本Python 3.7已正式進入測試版發布階段。Python 3.7的最終版定于2018年6月發布,但此后不會為Python 3.7版本添加任何新功能。
Python 3.7最重要的添加和改進之處包括如下:
用類處理數據時減少樣板代碼的數據類。
一處可能無法向后兼容的變更涉及處理生成器中的異常。
面向解釋器的“開發模式”。
具有納秒分辨率的時間對象。
環境中默認使用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生成器異常處理
正如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倍。
源代碼中的一些常量現在可以更高效地優化。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“python3.7新特性有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。