Python 3.9 於2020年10月5日發布。Python 3.9不僅為Python開發者帶來了新的特性,同時為Python社區帶來了一次重要的版本迭代升級。本篇文章主要介紹 Python 3.9的新特性,方便Python開發者熟悉新版本並將其應用到實際項目中。
一、解釋器變化
1、解釋器啟動性能優化
Python 3.9對解釋器啟動性能進行了優化,通過將parsing啟動編譯器改為延遲加載,在Python啟動過程中編譯器不會馬上加載,從而減少了Python解釋器啟動時間。
import timeit
print(timeit.timeit(lambda: exec("", {}, {})))
# 3.8.6 60.0ms +- 789ms
# 3.9.0b2 37.4ms +- 928us
上述代碼是運行 Python3.8.6 和 Python 3.9.0 beta2 兩個版本解釋器啟動的性能對比。
2、字節碼解釋器
在Python 3.9中,引入了一個新的子解釋器,用於多線程編程。這些解釋器之間互相隔離並且具有有限的交互方式,避免了不同線程間變量名衝突問題。同時,它還提供了更快的切換速度和更好的線程安全性。
二、類型提示增強
1、函數註解在參數和返回值位置同時使用
在Python 3.9中,函數注釋不僅可以用於函數參數還可以用於函數返回值。
from typing import List
def foo() -> List[str]:
return ['hello', 'world']
print(foo()) # ['hello', 'world']
2、對Type Hint的簡化
Python 3.9中簡化了Type Hint中list和dict類型的注釋寫法。使用Python 3.9,我們可以這麼寫:
def append_to_list(lst: list[str], value: str):
lst.append(value)
三、其他語言特性借鑒
1、New parser:PEP 617 的解析器更改是Python 3.9中的一個重要變化。Python從手寫的解析器改為了使用新的解析器框架,以獲得更好的可維護性和更高的性能。
2、Zero-overhead exception handling:Python 3.9實現了PEP 584提出的預先分配異常對象,這樣可以避免在發生異常時臨時分配異常對象。
3、全新的模塊zoneinfo:Python 3.9中引入了zoneinfo模塊,用於提供本地時間和時區信息。
四、有用的標準庫和模塊功能
1、functools.cached_property:為了減少重複計算,Python 3.9引入了一個新的緩存屬性。
import timeit
class Weather:
@functools.cached_property
def data(self):
# do expensive computation
return self.result
w = Weather()
print(w.data())
print(w.data())
2、importlib.metadata:通過importlib.metadata,Python 3.9可以查找和訪問元數據,例如使用pip安裝新模塊自動生成的元信息。
import importlib.metadata
print(list(importlib.metadata.packages()))
# ['Pillow', 'altgraph', 'certifi']
五、結語
本文介紹了Python 3.9中的一些重要特性和增強。Python 3.9的發布對Python開發者和Python社區都意義重大。通過學習Python 3.9的新特性,可以提高Python開發者的效率和開發質量。未來,Python的發展空間還會進一步擴大。
原創文章,作者:EJGBK,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/370905.html