溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python3.7新特性有哪些

發(fā)布時間:2021-08-25 09:08:14 來源:億速云 閱讀:101 作者:小新 欄目:開發(fā)技術

這篇文章主要介紹了python3.7新特性有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Python 3.7增添了眾多新的類,可用于數(shù)據(jù)處理、針對腳本編譯和垃圾收集的優(yōu)化以及更快的異步I/O。

Python這種語言旨在使復雜任務變得簡單,最新版本Python 3.7已正式進入測試版發(fā)布階段。Python 3.7的最終版定于2018年6月發(fā)布,但此后不會為Python 3.7版本添加任何新功能。

Python 3.7最重要的添加和改進之處包括如下:

  • 用類處理數(shù)據(jù)時減少樣板代碼的數(shù)據(jù)類。

  • 一處可能無法向后兼容的變更涉及處理生成器中的異常。

  • 面向解釋器的“開發(fā)模式”。

  • 具有納秒分辨率的時間對象。

  • 環(huán)境中默認使用UTF-8編碼的UTF-8模式。

  • 觸發(fā)調(diào)試器的一個新的內(nèi)置函數(shù)。

Python數(shù)據(jù)類

眾所周知,Python是處理結構化數(shù)據(jù)的一種快捷又方便的方法。Python提供了用來組織管理結構,并將常見行為與數(shù)據(jù)實例聯(lián)系起來的類,但是擁有許多初始化器的類歷來存在這個弊端:需要大量的樣板代碼為它們創(chuàng)建實例。比如說:

python3.7新特性有哪些

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

python3.7新特性有哪些

因而生成的類運行起來如同普通的Python類。你還可以聲明某些字段是“凍結”或不可變的,并且使創(chuàng)建屬性的特殊方法(比如__hash__或__repr__)實現(xiàn)自動化(或手動覆蓋)。

Python生成器異常處理

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

在Python 3.7中,生成器引發(fā)StopIteration異常后,StopIteration異常將被轉換成RuntimeError異常,那樣它不會悄悄一路影響應用程序的堆??蚣?。這意味著如何處理生成器的行為方面不太敏銳的一些程序會在Python 3.7中拋出RuntimeError。而在Python 3.6中,這種行為生成一個棄用警告;在Python 3.7中,它生成一個完整的錯誤。

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

Python開發(fā)模式

Python解釋器新的命令行開關:-X讓開發(fā)人員可以為解釋器設置許多低級選項。在Python 3.7中,選項-X dev啟用“開發(fā)模式”,這種運行時檢查機制通常對性能有重大影響,但在調(diào)試過程中對開發(fā)人員很有用。

-X dev激活的選項包括:

  • asyncio模塊的調(diào)試模式。這為異步操作提供了更詳細的日志記錄和異常處理,而異常操作可能很難調(diào)試或推理。

  • 面向內(nèi)存分配器的調(diào)試鉤子。這對于編寫CPython擴展件的那些人很有用。它能夠?qū)崿F(xiàn)更明確的運行時檢查,了解CPython如何在內(nèi)部分配內(nèi)存和釋放內(nèi)存。

  • 啟用faulthandler模塊,那樣發(fā)生崩潰后,traceback始終轉儲出去。

具有納秒分辨率的Python時間函數(shù)

Python 3.7中一類新的時間函數(shù)返回納秒精度的時間值。盡管Python是一種解釋型語言,但是Python的核心開發(fā)人員維克多?斯廷納(Victor Stinner)主張報告納秒精度的時間。最主要的原因是,在處理轉換其他程序(比如數(shù)據(jù)庫)記錄的時間值時,可以避免丟失精度。

新的時間函數(shù)使用后綴_ns。比如說,time.process_time()的納秒版本是time.process_time_ns()。請注意,并非所有的時間函數(shù)都有對應的納秒版本,因為其中一些時間函數(shù)并不得益于此。

Python UTF-8模式

Python一直支持UTF-8,以便輕松處理字符串和文本。但是周圍環(huán)境中的語言環(huán)境(locale)有時仍是ASCII,而不是UTF-8,檢測語言環(huán)境的機制并不總是很可靠。

Python 3.7添加了所謂的“UTF-8模式”,可通過-X命令行開關啟用該模式,該模式假設UTF-8是環(huán)境提供的語言環(huán)境。在POSIX語言環(huán)境中,UTF-8模式默認情況下已被啟用,但在其他位置默認情況下被禁用,以免破壞向后兼容。值得試一試在默認情況下開啟UTF-8模式,但不應該在生產(chǎn)環(huán)境下啟用它,除非你確信Python與周圍環(huán)境的所有交互都使用UTF-8。

內(nèi)置breakpoint()函數(shù)

Python隨帶內(nèi)置的調(diào)試器,不過它也可以連入到第三方調(diào)試工具,只要它們能與Python的內(nèi)部調(diào)試API進行對話。不過,Python到目前為止缺少一種從Python應用程序里面以編程方式觸發(fā)調(diào)試器的標準化方法。

Python 3.7添加了breakpoint(),這個內(nèi)置函數(shù)使得函數(shù)被調(diào)用時,讓執(zhí)行切換到調(diào)試器。相應的調(diào)試器不一定是Python自己的pdb,可以是之前被設為首選調(diào)試器的任何調(diào)試器。以前,調(diào)試器不得不手動設置,然后調(diào)用,因而使代碼更冗長。而有了breakpoint(),只需一個命令即可調(diào)用調(diào)試器,并且讓設置調(diào)試器和調(diào)用調(diào)試器涇渭分明。

其他新的Python 3.7功能

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

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

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

模塊屬性訪問定制

你在Python程序中創(chuàng)建模塊時,現(xiàn)在可以針對該模塊的實例定制屬性訪問的行為。為此,只需要在模塊里面創(chuàng)建一個__getattr__方法,就跟為一個類創(chuàng)建方法那樣。這樣一來,就可以對諸如請求模塊里面不存在的函數(shù)或方法之類的操作進行攔截、標記或代理。

Python importlib資源

importlib模塊現(xiàn)在可用來讀取“資源”,即隨Python應用程序一并交付的二進制工件,比如數(shù)據(jù)文件。這樣一來,開發(fā)人員可以通過importlib的抽象來訪問那些文件,所以它們存儲在系統(tǒng)上某個地方的.zip文件中還是存儲在目錄中并不重要。

底層優(yōu)化

現(xiàn)在許多單獨的操作更快速了:

由于新的操作碼,方法調(diào)用起來最多快20%。(除非你在編寫直接處理Python操作碼的代碼,否則不需要擔心由此帶來的影響。)正則表達式中不區(qū)分大小寫的匹配速度更快了,有時要快20倍。

源代碼中的一些常量現(xiàn)在可以更高效地優(yōu)化。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“python3.7新特性有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI