最新的 Python 功能
本文將說明 Python 的最新功能。
我們將從實用與「立即可用」的角度,逐步介紹 Python 3.12 到 3.13 版本時期值得關注的新功能。
YouTube Video
最新的 Python 功能
近年來,Python 不僅強調**「易於編寫」,同時也注重「健壯性、速度與可讀性」**等進化方向。以下將介紹 Python 3.12 到 3.13 這一代值得關注的功能。
錯誤訊息大幅改進(Python 3.12)
在 Python 3.12 中,錯誤訊息以更具體、視覺化的方式顯示。你可以立即判斷錯誤發生的位置,大幅減少除錯時間。
1def calc_total(price, tax):
2 return price + price * tax
3
4result = calc_total(100, )- 遺漏的參數會連同相關程式碼行與位置一同顯示,因此找出錯誤原因變得不易混淆。
「match」語句的實用應用(結構化模式匹配)
「match」語句讓你能以宣告式寫法描述複雜條件分支與資料結構判斷。對於字典與巢狀結構的處理,特別能提升可讀性。
1user = {"status": "active", "name": "Alice"}
2
3match user:
4 case {"status": "active", "name": name}:
5 print(f"Welcome back, {name}!")
6 case {"status": "inactive"}:
7 print("Please activate your account.")
8 case _:
9 print("Unknown user status.")- 由於能同時進行條件分支與資料擷取,因此無需多層巢狀 if 判斷。
以直觀的模式匹配處理巢狀資料
「match」語句對於處理 JSON 或 API 回應等結構化資料也很有效。
1data = {"user": {"name": "Bob", "age": 25}}
2
3match data:
4 case {"user": {"name": name, "age": age}}:
5 print(f"{name} is {age} years old.")- 你可以安全地擷取必要元素,減少防禦性程式碼的需求。
增強版 f-string 除錯輸出(=` 標記 / Python 3.8+,易用性提升)
透過 f-string,現在可以加上 =,同時顯示運算式本身與其評估結果。這項功能專為除錯設計,想快速檢查變數內容時非常方便。
1x = 10
2y = 20
3print(f"{x=}, {y=}, {x+y=}")- 由於會同時顯示變數名稱和其值,利用
print()做臨時除錯時容易閱讀。 - 你可以更簡潔且具表達力地撰寫日誌輸出與驗證程式碼。
簡化型別提示及「type」別名語法(Python 3.12:新型別別名語法)
在 Python 3.12 中,新增了專用型別別名語法——type 陳述式。這使得型別提示不只做為補充資訊,而能作為語言元素明確表達設計意圖。
1type UserId = int
2type UserName = str
3
4def greet(user_id: UserId, name: UserName) -> str:
5 return f"Hello, {name} (id={user_id})"- 透過給予
UserId或UserName等名稱,即使本質上同樣使用int或str,也能明確區分其角色差異。 - 型別定義變得更簡潔,降低程式碼審查與維護時的理解成本。
- 以往像
UserId = int這樣的型別別名是用指定建立,但改用type陳述式即可明確表達「這是型別定義」。在中大型專案中,這對提升設計可讀性特別有效。
自然使用內建型別註記(Python 3.9+:簡化泛型語法)
自 Python 3.9 起,可以直接將內建型別如 list、dict 用作泛型。
這使你無需從 typing 匯入型別,即可撰寫直覺且易讀的型別提示。
1def sum_numbers(numbers: list[int]) -> int:
2 return sum(numbers)
3
4print(sum_numbers([1, 2, 3, 4]))- 型別提示的用途並非「限制」,而是做為「說明處理內容的文件」。
使用 Self 型別安全實現方法鏈結(Python 3.11 以後)
自 Python 3.11 起,可將 Self 指定為返回自身類別的方法回傳型別。
這樣撰寫方法鏈結程式碼時,型別資訊不會遺失,更加安全。
1from typing import Self
2
3class Counter:
4 def __init__(self, value: int = 0) -> None:
5 self.value = value
6
7 def increment(self) -> Self:
8 self.value += 1
9 return self
10
11counter = Counter()
12counter.increment().increment()
13print(counter.value)- 即使返回
self的方法,也能正確保留回傳型別。 - IDE 及型別檢查工具能正確解析方法鏈結。
更明確的字串處理(removeprefix/removesuffix | Python 3.9+)
自 Python 3.9 起,新增了 str.removeprefix() 和 str.removesuffix() 方法,能安全地移除字串的首碼與尾碼。利用這些方法,能精確表達僅移除字串開頭或結尾的意圖。
1filename = "report_2026.txt"
2
3clean_name = filename.removeprefix("report_")
4name_without_ext = clean_name.removesuffix(".txt")
5
6print(name_without_ext)- 只有當指定字串確實位於開頭或結尾時才會被移除,避免意外置換問題。
- 這種方法比起
replace()或切片,更具可讀性與安全性。 - 特別是在處理「有格式的字串」如檔名、URL 前置時,使用這些方法大幅降低產生 bug 的風險。
國際化下的穩健字串比對(str.casefold() | Unicode 支援)
str.casefold() 是 Python 中考慮 Unicode 標準的大小寫不敏感比對方法。與單純的 lower() 或 upper() 不同,它還會包含語言特定的字符轉換進行正規化。
1text1 = "Stra\u00dfe"
2text2 = "strasse"
3
4print(text1)
5print(text2)
6
7print(f"Comparison Result: {text1.casefold() == text2.casefold()}")- 可以正確處理語言相關差異,例如德文的
ß與ss。 - 這是多語系支援或國際化應用程式的重要技術。
標準 TOML 支援(tomllib | Python 3.11+)
自 Python 3.11 起,標準函式庫新增 tomllib 模組用於讀取 TOML 設定檔。設定檔管理現可完全以 Python 完成,無需依賴外部函式庫。
1import tomllib
2
3with open("config.toml", "rb") as f:
4 config = tomllib.load(f)
5
6print(config["database"]["host"])
7
8# config.toml
9# title = "TOML Example"
10# [database]
11# host = "192.168.1.1"
12# ports = [ 8001, 8001, 8002 ]- 不再需要像
toml這類外部套件,令相依關係更簡潔。 - 設定檔載入流程標準化,便於部署、運維及 CI 環境管理。
並行時代的異常處理(ExceptionGroup / except* | Python 3.11+)
Python 3.11 引入了**ExceptionGroup 用於同時處理多個異常**,與分支處理專用的 except* 語法。專為非同步或平行處理中「同時出現多個錯誤」的情境設計的新功能。
1def process(values):
2 errors = []
3 for v in values:
4 if v < 0:
5 errors.append(ValueError(f"Negative value: {v}"))
6 if errors:
7 raise ExceptionGroup("Invalid values", errors)
8
9try:
10 process([1, -2, -3])
11except* ValueError as e:
12 print("Handled:", e)- 現可一次觸發與分類多個異常。
- 解決了以往非同步處理僅能捕獲第一個錯誤的困擾。
- 例如
asyncio.gather()或並行批次處理時,可能同時出現多種失敗原因。運用ExceptionGroup更有利於組織錯誤彙總、日誌記錄與重試策略。
僅需升級到最新版即可提升效能
自 Python 3.11 起,許多處理流程由於內部最佳化明顯加快。
1def count_up(n):
2 total = 0
3 for i in range(n):
4 total += i
5 return total
6
7print(count_up(1_000_000))- 最大優點是:無需更動程式碼也能享受速度提升。
管理垃圾回收(透過 gc 模組顯式操作)
在 Python 中,使用標準的 gc 模組 即可暫時停用或手動執行垃圾回收。在大量資料批次處理、效能關鍵場景下屬於有效的最佳化技巧。
1import gc
2
3gc.disable()
4# heavy batch processing
5gc.enable()
6gc.collect()- 抑制不必要的垃圾回收可減少處理時間波動。
- 你可在流程間隔時顯式進行回收,使記憶體使用更易追蹤。
- 然而,此方法不建議做為預設最佳化,僅當分析結果顯示垃圾回收為瓶頸時才宜考慮。對大多數應用而言,依賴 Python 的自動垃圾回收最為安全。
總結
隨著 Python 3.12 至 3.13 版本錯誤訊息的改進及型別提示的進化,理解與維護程式碼比以往更加容易。此外,像更好的除錯體驗與內部優化帶來的效能提升,已在實務上穩步提升生產力。你無需一次採用全部新功能,實務上建議先升級到最新 Python 版本,視需求逐步導入。這樣逐步採用的方式能帶來更具可讀性與健壯性的 Python 程式碼。
您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。