logo

Python 3.13

Python 3.13 の新機能と改善点

Python 3.13 は、言語の進化、パフォーマンスの向上、および開発者の利便性を重視したリリースです。本記事では、ジュニアエンジニアにも分かりやすいように、新機能や改善点を解説します。


1. 新しいインタラクティブインタープリター

Python の REPL (対話型シェル) が刷新され、より使いやすくなりました。

主な改善点

  • 多行編集と履歴の保存
  • REPL コマンド (help, exit, quit) が直接使用可能
  • デフォルトでカラー表示のプロンプトとエラーメッセージ
  • F1キーでヘルプ、F2キーで履歴ブラウズ、F3キーでペーストモード

🔹 無効化したい場合 → 環境変数 PYTHON_BASIC_REPL=1 を設定。


2. GIL (グローバルインタプリタロック) を無効にできる実験的機能

変更点

  • GIL を無効にして実行できる CPython の実験的サポート
  • 並列処理の性能向上 (特に CPU をフル活用するマルチスレッドアプリ向け)
  • python3.13t という別の実行ファイルで利用
  • 環境変数 PYTHON_GIL=0 または -X gil=0 で制御

注意点

  • まだ実験段階 (シングルスレッドのパフォーマンスが若干低下する可能性)
  • C 拡張モジュールは、GIL 無効化用に再ビルドが必要

3. Just-In-Time (JIT) コンパイラーの実験的導入

Python 3.13 では、プログラムを高速化する JIT コンパイラー の試験的サポートが追加されました。

ポイント

  • JIT を有効にするには、ビルド時に --enable-experimental-jit を指定
  • ホットな (頻繁に実行される) コードを動的に最適化
  • デフォルトでは無効
  • 今後のリリースでさらなる改善予定

🔹 確認方法

python3.13 -X jit=1

4. エラーメッセージの改善

エラーメッセージが、より分かりやすくなりました。

主な改善点

  • デフォルトでカラー表示
  • 関数の誤った引数に対し、正しい候補を提案
  • スクリプト名が標準ライブラリと衝突した場合、明確な警告を表示

🔹 無効化したい場合 → 環境変数 PYTHON_COLORS=0


5. locals() の動作が明確化

これまでは、locals() の返すマッピングを変更した際の挙動が曖昧でした。

改善点

  • 関数スコープでは locals() の返す辞書が独立したスナップショットに
  • exec()eval()locals() に対する変更が、後続の locals() 呼び出しに影響しなくなった

6. iOS と Android が公式サポート (Tier 3)

Python が公式に iOS/Android に対応

  • iOS (arm64)
  • Android (aarch64, x86_64)

⚠ まだ Tier 3 のため、安定性は保証されていません。


7. その他の言語仕様の改善

変更点

  • str.replace()count がキーワード引数として指定可能に
  • クラスの __static_attributes__ が追加 (クラス内で変更される属性を記録)
  • 関数 exec()eval()globals/locals をキーワード引数として指定可能に

🔹

text = "hello world"
print(text.replace("o", "O", count=1))  # 1回だけ置換

8. 新しい標準モジュール

dbm.sqlite3

  • SQLite をバックエンドとする dbm 実装
  • dbm.ndbmdbm.gnu の代替として利用可能

🔹 使い方

import dbm.sqlite3

with dbm.sqlite3.open('mydb', 'c') as db:
    db[b'key'] = b'value'
    print(db[b'key'])  # b'value'

9. 標準ライブラリの改善

🔹 asyncio の改善

  • asyncio.as_completed() が awaitable を受け付けるように
  • Queue.shutdown() による安全なキューの終了

🔹 math の新関数

  • math.fma() (融合積和演算)
import math
print(math.fma(2.0, 3.0, 4.0))  # (2 * 3) + 4 = 10.0

🔹 mimetypes の MIME タイプ推測

import mimetypes
print(mimetypes.guess_file_type("example.jpg"))  # ('image/jpeg', None)

🔹 pathlib の改善

  • Path.from_uri("file:///home/user/file.txt")Path オブジェクトを生成

🔹 bz2, lzma, tarfile, zipfile の改善

  • name および mode 属性をサポート

まとめ

Python 3.13 では、新しい インタラクティブシェルGIL の無効化JIT コンパイラーの実験的導入 など、開発体験を向上させる多くの機能が追加されました。

📌 次のステップ

logo