Pythonの主な新機能まとめ|バージョンごとの変更の要点を解説

Python は継続的に進化しています。この記事では Python 各バージョンの主な新機能・変更点の要点をまとめて解説します。
目次
はじめに
Python は、定期的に新バージョンがリリースされ、文法の追加や標準ライブラリの拡張、パフォーマンスの改善など、様々な変更が行われています。新しい機能が追加されることで、より簡潔で読みやすいコードが書けるようになったり、開発効率が向上したりといったことも少なくありません。
Python の変更点は、公式ドキュメントのリリースノートから確認できます。しかし、すべてを把握するのは容易ではありません。
そこで、この記事では、Python 3.10 以降のバージョンを対象に、特に重要と考えられる新機能や変更点を中心に要点を整理して紹介します。なお、すべての変更点を網羅するものではなく、筆者が重要だと考えるものを優先して取り上げています。
より詳細には公式ドキュメントの各バージョンにおける「What’s new in Python X.X?」というリンクを参照してください。
また、各機能の詳細については、本サイトで個別記事として解説しているものもあるため、必要に応じて関連記事へのリンクも掲載しています。
Python 各バージョンの主な新機能・変更点
Python 3.14
Python 3.14 では、型注釈の仕組みや並列処理に関する改善など、言語仕様に関わる変更がいくつか導入されています。また、文字列機能(t-string)や圧縮ライブラリ(zstd)など、開発者の利便性を高める文法や標準ライブラリ拡張も行われています。
型注釈の遅延評価
型注釈の評価モデルが変更され、遅延評価の仕組みが導入されました。これにより、型注釈は、必要なタイミングで評価されるようになりました。
フリースレッドな Python(改善)
Python 3.13 で実験的に導入されたフリースレッドな Python の改善が進められました。フリースレッドな Python では、従来の GIL (Global Interpreter Lock) に依存しない実行モデルが検討されており、マルチスレッド環境での並列処理性能の向上が期待されています。
テンプレート文字列(t-string)
新しい文字列機能としてテンプレート文字列(t-string)が文法に導入されました。これは、文字列のテンプレート処理を安全かつ柔軟に扱うための仕組みで「文字列化されていないテンプレート」という概念を Python 標準の文法として取り入れています。
f-string は、文字列として即時評価されますが、t-string は後から評価・処理できるため、安全な文字列処理を実現するための実装に役立ちます。
Zstandard(zstd)の標準ライブラリ化
Zstandard は、Meta(旧 Facebook)が開発した高速で高圧縮な圧縮アルゴリズムです。Python 3.13 以前でも、外部ライブラリで使用できましたが、Python 3.14 で標準ライブラリ(zstd)として取り込まれました。
これにより、外部ライブラリに依存しない形で、高速かつ高圧縮な Zstandard のデータ圧縮を扱えるようになりました。
Python 3.13
Python 3.13 では、Python の実行モデルや開発体験に関わる改善が導入されています。特に、並列処理や実行速度の向上を目指した実験的な機能が追加されている点が特徴的です。
フリースレッドな Python(実験)
「フリースレッドな Python」が実験的な機能として導入されました。従来の Python では、マルチスレッドの並列処理では、GIL (Global Interpreter Lock) により制限を受けていました。
フリースレッドな Python は、GIL を使わない実行モデルであり、試験的に導入されました。この機能により、将来的には、Python でも効率的なマルチスレッド処理が可能になると期待されています。
JIT (Just-In-Time) コンパイラ(実験)
プログラム実行時にコードをコンパイルして最適化する「JIT (Just-In-Time) コンパイラ」が実験的な機能として導入されました。JITは、プログラム実行時にコードを機械語へ変換・最適化することで、処理のパフォーマンス向上が期待されています。
REPL 改善
インタラクティブな実行環境(REPL)が大きく改善されています。表示機能などが強化され、Python を対話的に利用する際の操作性が向上しました。
Python 3.12
Python 3.12 では、文字列機能強化や標準ライブラリの整理など、言語仕様や開発環境を整えるための変更が行われました。
f-string 文法の拡張
f-string の使い方の制限がいくつか解除され、より柔軟に式を記述できるようになりました。例えば、「f-string を囲むクォートと同じクォートを文字列中で再利用できるようになった」などがあります。
これにより、従来制限されていた複雑な式や改行を含む表現なども f-string 内で扱えるようになっています。
distutils 削除
Python パッケージを作成・配布するためのツールとして、長年非推奨となっていた distutils モジュールが正式に削除されました。現在では、setuptools が事実上デファクトスタンダードの位置づけとなっています。
distutils の機能は、setuptools に取り込まれているため、3.12 以降で distutils が必要な場合でも、setuptools に含まれる互換実装を利用できます。
サブインタープリタ(インタープリタごとの GIL)
サブインタープリタごとに独立した GIL を持つ仕組み(Per-interpreter GIL)の実装が進められました。これは、将来的な並列処理改善に向けた重要な基盤です。
Python 3.11
Python 3.11 では、Python の大幅なパフォーマンス改善が注目されました。実行速度の向上に加えて例外処理や標準ライブラリにも変更が加えられています。
実行速度の大幅改善
インタープリタの内部最適化などが進められ、実行速度が大幅に改善されました。3.11 のリリースノートでは「Python 3.10 とくらべて 10-60% 高速」「平均的には、標準ベンチマークスイートでは 1.25倍の高速化を計測」と記載があり、大きな性能向上が確認されています。
例外グループ / except*
複数の例外をまとめて扱うための例外グループ(ExceptionGroup)が導入されました。これにより例外をグループ化してまとめて送出できるようになりました。
また、対応する構文として「except*」が追加されており、例外グループの中に指定した型の例外が含まれている場合、その例外だけを取り出して処理することができるようになりました。
例外グループにより、並列処理などで複数例外が発生する場合に、処理が行いやすくなっています。
tomllib 標準ライブラリ化
TOML ファイルを読み込むための tomllib モジュールが標準ライブラリとして追加されました。これにより、設定ファイルなどで利用される TOML 形式を標準機能として扱えるようになりました。
近年の Python では、pyproject.toml でプロジェクト設定や依存関係、ツール設定を一元化することが一般的となっているため、tomllib は重要な役割を果たします。
Python 3.10
Python 3.10 では、新しい構文や型ヒント改善など、Python の書き方に影響する重要な変更が導入されています。
構造的パターンマッチ(match / case)
新しい構文として、構造的パターンマッチ(match / case)が導入されました。構造的パターンマッチは、3.10 の中心的な新機能であり、最も議論を起こした複雑な機能とも言われています。この機能は受理されるまで何度も議論されました。
これは、値のパターンに応じて処理を分岐する仕組みで、他言語の switch に似ていますが、クラス構造などを含めてマッチングできるなど、より柔軟なマッチングを行うことができます。
Union 型(|)
型ヒントで、Union 型を | 演算子で X | Y のように記述できるようになりました。Union 型とは、「1 つの変数や引数が、複数の型のうちいずれかを取り得る」ことを示すための型ヒントです。従来の typing.Union[X, Y] といった形式より簡潔に型表現できるようになっています。
distutils 非推奨
パッケージビルドツールである distutils が非推奨となりました。その後、Python 3.12 で正式に削除されており、現在は setuptools が事実上のデファクトスタンダードの位置づけとなっています。
まとめ
この記事では、Python の各バージョン(3.10 以降)の主な新機能や変更点について紹介しました。
Python は継続的に進化しており、新しいバージョンでは文法の追加やパフォーマンス改善などが行われています。特に Python 3.10 以降では、構造的パターンマッチや例外グループ、フリースレッドな Python など、言語仕様や実行環境に関わる重要な変更が導入されています。
Python 利用の際には、使用バージョンによる違いを意識して使用してみてください。


の内容を列挙して扱う方法-_-keys-values-items-_.jpg)

内包表記の使い方.jpg)
関数-_yieldによる返却_.jpg)

内の要素の有無を確認する方法-_-in-not-in-_.jpg)