經過一年半的發展
其中新增的
-
支持 複雜表達式中的賦值操作。 使用新的“:=”運算符,可以在其他表達式內執行賦值操作,例如,避免條件語句中和定義循環時的雙重函數呼叫:如果 (n := len(a)) > 10:
...while (塊:= f.read(256)) != ":
... -
支持 用於指定函數參數的新語法。 在函數定義期間枚舉參數時,現在可以指定“/”來將只能根據函數呼叫期間枚舉值的順序賦值的參數與可賦值的參數分隔開以任何順序(變數=值語法))。 在實用方面,新功能允許 Python 中的函數完全模擬 C 中現有函數的行為,並且還可以避免綁定到特定名稱,例如,如果計劃將來更改參數名稱。「/」標誌補充了先前新增的「*」標誌,分隔僅適用「變數=值」形式的賦值的變數。 例如,在函數「def f(a, b, /, c, d, *, e, f):」中,變數「a」和「b」只能按照值列出的順序進行賦值,
變數“e”和“f”只能透過賦值“variable=value”,變數“c”和“d”可以透過以下任一種方式:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, s=30, d=40, e=50, f=60) -
添加 新的C API
配置Python初始化參數,允許完全控制所有配置 並提供先進的錯誤處理設施。 提議的 API 可以輕鬆地將 Python 解釋器功能嵌入到其他 C 應用程式中; -
實施的 新的 Vectorcall 協定可以更快地存取用 C 語言編寫的物件。 在CPython 3.8中,對Vectorcall的存取仍然僅限於內部使用;在CPython 3.9中計劃轉移到可公開存取的API類別; -
添加 呼叫運行時審核掛鉤,它為 Python 中的應用程式和框架提供了存取有關腳本進度的低階資訊的權限,以審核所執行的操作(例如,您可以追蹤模組的導入、開啟檔案、使用追蹤、訪問網路套接字,透過exec、eval 和run_mod 執行程式碼); - 在模組中
泡菜 假如 支援 Pickle 5 協議,用於序列化和反序列化物件。 Pickle 可讓您透過減少記憶體複製操作的數量並應用其他最佳化技術(例如使用特定於資料的壓縮演算法)來優化多核心和多節點配置中的 Python 進程之間的大量資料傳輸。 該協議的第五版本值得注意的是添加了帶外傳輸模式,其中數據可以與主pickle流分開傳輸。 - 預設情況下,Pickle 協定的第四個版本被激活,與先前預設提供的第三個版本相比,它可以實現更高的效能並減少傳輸資料的大小;
- 在模組中
鍵入 引進了幾個新功能: - 新增了為帶有字節碼的已編譯檔案指派快取的功能,這些檔案保存在單獨的 FS 樹中,並與程式碼所在的目錄分開。 透過變數設定保存字節碼檔案的路徑
PythonPyCache前綴 或選項“-X pycache_prefix”; -
實施的 能夠建立使用與版本相同的 ABI 的 Python 偵錯版本,這允許您在偵錯版本中載入以 SI 語言編寫、為穩定版本編譯的擴充功能; - f 字串(以「f」為前綴的格式化文字)提供對 = 運算子的支援(例如「f'{expr=}'」),它允許您將表達式轉換為文字以便於偵錯。 例如:
››› 用戶 = 'eric_idle'
››› member_since = 日期(1975, 7, 31)
››› f'{user=} {member_since=}'
“用戶='eric_idle'member_since=datetime.date(1975年7月31日)” - 表達 ”
繼續 » 允許在區塊內使用最後 ; - 新增了新模組
多處理.共享記憶體 ,允許在多進程配置中使用共享記憶體段; - 在 Windows 平台上,asyncio 實作已移至使用該類
前攝器事件循環 ; - 由於使用了新的目標程式碼快取機制,LOAD_GLOBAL 指令的效能提高了約 40%。
來源: opennet.ru