Python 3.9 程式語言的發布

經過一年的發展 提出了 重要的程式語言發布 Python的3.9。 Python 3.9 是之後的第一個版本 過渡 項目 新周期 發布的準備和支援。 新的主要版本現在每年產生一次,修正更新將每兩個月發布一次。 每個重要分支將獲得一年半的支持,之後將為其開發另外三年半的時間來修復漏洞。

現在,新分支的工作在下一個分支發布前五個月開始,即與 Python 3.9 的發布同時進行 開始 Python 3.10 分支的 alpha 測試。 Python 3.10 分支將發佈為期七個月的 alpha 版本,在此期間將新增功能並修復錯誤。 此後,Beta版本將進行為期三個月的測試,在此期間將禁止添加新功能,並將全部精力集中在修復錯誤上。 發布前的最後兩個月,該分支將處於發布候選階段,並在此階段進行最終的穩定。

其中 添加 創新 在Python 3.9:

  • 在使用內建 dict 類別定義的字典中, 出現 支援合併運算符“|” 和「|=」更新,補充了先前提出的用於合併字典的 {**d1, **d2} 和 dict.update 方法。

    >>> x = {"key1": "來自 x 的值 1", "key2": "來自 x 的值 2"}
    >>> y = {"key2": "來自 y 的值 2", "key3": "來自 y 的值 3"}

    >>> x | y
    {'key1': '來自 x 的值 1', 'key2': '來自 y 的值 2', 'key3': '來自 y 的值 3'}

    >>> y | X
    {'key2': '來自 x 的值 2', 'key3': '來自 y 的值 3', 'key1': '來自 x 的值 1'}

  • 內建的類型集合包括list、dict和tuple,它們可以用作基本類型,而無需從typing模組導入。 那些。 現在您可以指定而不是typeing.List、typing.Dict和typing.Tuple
    只需列出、字典和元組:

    defgreet_all(names:list[str])->無:
    對於名稱中的名稱:
    印刷(“你好”,姓名)

  • 均提供 用於註解函數和變數的靈活工具。 為了附加註釋,打字模組中新增了新的註釋類型,使用可用於靜態分析或執行時間最佳化的附加元資料擴展了現有類型。 為了從程式碼存取元數據,include_extras 參數已添加到typing.get_type_hints() 方法中。

    charType = Annotated[int, ctype("char")] UnsignedShort = Annotated[int, struct2.ctype('H')]

  • 淡化 裝飾器的語法要求 - 任何適合在 if 和 while 區塊中使用的表達式現在都可以用作裝飾器。 這項變更顯著提高了 PyQt5 程式碼的可讀性並簡化了該模組的維護:

    曾是:
    按鈕_0 = 按鈕[0] @button_0.clicked.connect

    現在你可以寫:
    @buttons[0].clicked.connect

  • 到標準庫 添加區域信息,其中包括 IANA 時區資料庫的資訊。

    >>> 從 zoneinfo 匯入 ZoneInfo
    >>> 從日期時間匯入日期時間,時間增量
    >>> # 夏令時
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("美國/洛杉磯"))
    >>> 列印(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    '太平洋夏令時'

    >>> # 標準時間
    >>> dt += timedelta(天=7)
    >>> 列印(dt)
    2020-11-07 12:00:00-08:00

    >>> 列印(dt.tzname())
    PST

  • 新增了graphlib模組,其中 實施的 支援圖的拓撲排序。
  • 建議的 刪除前綴和行結尾的新方法 - str.removeprefix(prefix) 和 str.removesuffix(suffix)。 方法已新增至 str、bytes、bytearray 和 collections.UserString 物件中。

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    '酒吧'

  • 涉及 新的解析器 PEG (解析表達式語法),它取代了解析器 法學碩士(1)。 新解析器的使用使得擺脫一些用於繞過 LL(1) 中的限制的「駭客」成為可能,並顯著降低了維護解析器的勞動力成本。 在效能方面,新的解析器與先前的解析器大致處於同一水平,但在靈活性方面明顯領先,這讓您在設計新的語言功能時感到更加自由。 舊的解析器程式碼暫時保留,可以使用“-X oldparser”標誌或“PYTHONOLDPARSER=1”環境變數返回,但將在版本 3.10 中刪除。
  • 假如 C 擴充方法能夠使用直接指標取消引用來存取定義它們的模組的狀態,而不是使用 PyState_FindModule 函數搜尋模組狀態。 此變更可讓您透過減少或完全消除檢查模組狀態的開銷來提高 C 模組的效能。 為了將模組與類別關聯起來,建議使用 C 函數 PyType_FromModuleAndSpec(),為了取得模組及其狀態,建議使用 C 函數 PyType_GetModule() 和 PyType_GetModuleState(),並提供存取該類別的方法定義了C 函數PyCMethod 和METH_METHOD標誌。
  • 垃圾收集器 發表 鎖定包含重新啟動的物件的集合,這些物件在終結器運行後仍可從外部存取。
  • 添加方法 os.pidfd_open,它允許使用Linux核心子系統「pidfd」來處理PID重用情況(pidfd與特定進程關聯並且不會改變,而PID可以在與該PID關聯的當前進程終止後與另一個進程關聯) )。
  • 對 Unicode 規範的支援已更新至版本 13.0.0。
  • 被淘汰 內存洩漏 在同一進程中重新初始化 Python 解釋器時。
  • 內建類型 range、tuple、set、frozenset、list 和 dict 的效能已最佳化。 實施的 透過使用 Vectorcall 捷徑協定可以更快地存取用 C 語言編寫的物件。
  • 模組 _abc、audioop、_bz2、_codecs、_contextvars、_crypt、_functools、_json、_locale、operator、resource、time 和 _weakref 載入自 初始化分幾個階段.
  • 標準函式庫模組 audioop、ast、grp、_hashlib、pwd、_posixsubprocess、random、select、struct、termios 和 zlib 已轉換為使用受限 穩定的ABI,解決了不同版本Python的擴充模組元件的可操作性問題(更新版本時,無需重新建構擴充模組,針對3.9編譯的模組將能夠在3.10分支中運作)。
  • 由於潛在的安全性問題,asyncio 模組已棄用對reuse_address 參數的支援(在 Linux 上使用 SO_REUSEADDR 進行 UDP 允許不同進程將偵聽套接字附加到 UDP 連接埠)。
  • 新增了新的最佳化,例如,提高了多線程應用程式中訊號處理程序的效能,提高了FreeBSD 環境中子進程模組的速度,以及更快地分配臨時變數(在表達式“for y in [expr”中分配變數) ]” 現在與表達式“y = expr” 一樣高效”)。 一般來說,大多數測試 展示 與分支 3.8 相比,效能下降(僅在 write_local 和 write_deque 測試中觀察到加速​​):

    Python 版本 3.4 3.5 3.6 3.7 3.8 3.9
    —————————————————

    變數和屬性讀取存取:
    讀取本地 7.1 7.1 5.4 5.1 3.9 4.0
    讀取非本地 7.1 8.1 5.8 5.4 4.4 4.8
    讀取全域 15.5 19.0 14.3 13.6 7.6 7.7
    讀內建 21.1 21.6 18.5 19.0 7.5 7.7
    從類別中讀取類別變數 25.6 26.5 20.7 19.5 18.4 18.6
    從實例讀取類別變數 22.8 23.5 18.8 17.1 16.4 20.1
    讀實例變數 32.4 33.1 28.0 26.3 25.4 27.7
    讀取實例變數槽 27.8 31.3 20.8 20.8 20.2 24.5
    讀取命名元組 73.8 57.5 45.0 46.8 18.4 23.2
    讀取綁定方法 37.6 37.9 29.6 26.9 27.7 45.9

    變數和屬性寫存取:
    寫入本地 8.7 9.3 5.5 5.3 4.3 4.2
    寫非本地 10.5 11.1 5.6 5.5 4.7 4.9
    寫入全域 19.7 21.2 18.0 18.0 15.8 17.2
    寫類變數 92.9 96.0 104.6 102.1 39.2 43.2
    寫實例變數 44.6 45.8 40.0 38.9 35.5 40.7
    write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    資料結構讀取存取:
    讀取列表 24.2 24.5 20.8 20.8 19.0 21.1
    讀取雙端佇列 24.7 25.5 20.2 20.6 19.8 21.6
    讀字典 24.3 25.7 22.3 23.0 21.0 22.5
    讀取strdict 22.6 24.3 19.5 21.2 18.9 21.6

    資料結構寫入存取:
    寫入清單 27.1 28.5 22.5 21.6 20.0 21.6
    寫入雙端佇列 28.7 30.1 22.7 21.8 23.5 23.2
    寫字典 31.4 33.3 29.3 29.2 24.7 27.8
    寫入字串 28.4 29.9 27.5 25.2 23.1 29.8

    堆疊(或佇列)操作:
    清單追加彈出 93.4 112.7 75.4 74.2 50.8 53.9
    雙端佇列追加彈出 43.5 57.0 49.4 49.2 42.5 45.5
    雙端佇列追加popleft 43.7 57.3 49.7 49.7 42.8 45.5

    定時循環:
    循環開銷 0.5 0.6 0.4 0.3 0.3 0.3

  • 已刪除 許多 Python 2.7 函數和方法之前已被棄用並導致在先前版本中產生 DeprecationWarning,包括 html.parser.HTMLParser 中的 unescape() 方法,
    array.array 中的tostring() 和fromstring()、threading.Thread 中的isAlive()、ElementTree 中的getchildren() 和getiterator()、sys.getcheckinterval()、sys.setcheckinterval()、asyncio.Task.current_task ()、 asyncio.Task.all_tasks()、base64.encodestring() 和 base64.decodestring()。

來源: opennet.ru

添加評論