2025年2月22日(土曜日)開催予定のDjangoCongress JP 2025の配信が決定しました。
以下のYouTube Liveにて配信されます:
今年はDjangoだけでなくFastAPIなど非同期Webに関するトークも予定されています。またDjang
Python 3.10では PEP 647: ユーザ定義の型ガード が導入され、型ガード を定義して型推論に利用できるようになりました。
from typing import TypeGuard def is_int(x: object) -> TypeGuard[int]: return isinstance(x, int) def func(x:object) -> None: if is_int(x): reveal_type(x) # x は int
型ガードについては、Python 3.10の新機能(その7) ユーザ定義型ガード の解説を参照してください。
PEP 705: TypedDict: Read-only items では、TypedDict
に読み取り専用の項目を指定できるようになりました。
from typing import TypedDict, ReadOnly class FooDict(TypedDict): x: int y: int z: ReadOnly[int] # z は読み取り専用 foo: FooDict = {"x": 1, "y": 2, "z": 3} foo["x"] = 4 # Ok foo["z"] = 5 # エラー: "z" is a read-only key in "FooDict"
ただし、リストな
従来のPythonでは、Deprecate(廃止予定)のAPIを警告するために、次のように DeprecationWarning
を使っていました。
import warnings def func(): warnings.warn("deprecated", DeprecationWarning) return 0
しかし、この方法では実行するまで警告が表示されないため、警告を見逃されることがありました。
そこで、PEP 702では、@warnings.deprecated デコレータ
従来のジェネリック型では、型を決定できない型パラメータは Any
などにされていました。
class A[T]: foo: T | None def __init__(self, foo: T | None=None): self.foo = foo a = A() reveal_type(a) # Mypyでは a は A[Any] となる
PEP 696: Type Defaults for Type Parameters では、指定されていない型パラメータにデフォルトの型を指定できるようになりました。
class A[T=int]: # T のデフォルトを int に指定 foo: T |
2024年10月7日にリリースされたPython 3.13の概要を紹介します。
Python 3.13ではPythonのプログラミング言語としての仕様に大きな変更はありませんでしたが、将来のPythonの実行環境に大きな影響を与える、大きな変更が導入されました。
Python 3.13では、実験的な機能として、フリースレッドモードが導入されました。従来のPythonには、グローバルインタプリタロック(GIL)があり、マルチスレッドでのパフォーマンスが向上しないという問題がありました
Python3.0以降では、リスト内包でエラーが発生すると、トレースバックに <listcomp>
という不思議な関数名が表示されることがありました。
>>> def func(): ... [1/0 for i in range(10)] ... >>> f() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in func File "<stdin>", line 2, in <listcomp> ZeroDivisionError: di
Python3.11で開始された Faster CPython: CPython 高速化計画ですが、予定されていた Tracing optimizerが追加されなかったこともあり、残念ながらPython3.12では大きなパフォーマンスの改善は見られませんでした。
しかし、将来の高速化に向けて、大きな機能追加がありました。
Pythonのあまり知られていない機能に、サブインタープリター があります。これは一つのプロセス内で複数のPython実行環境を作成し、複数のアプリケーションを同時に動かすことができる
Pythonは、すべての変数などが参照しているオブジェクトを正確に把握し、それぞれのオブジェクトが参照されている数を厳密に記録しています。この、記録されている参照の数を、参照カウント と言います。参照カウントが 0 になると、そのオブジェクトはすでに利用されていないことが明らかなので、Pythonはそのオブジェクトを開放します。
オブジェクトの参照カウントは、sys.getrefcount() で調べられます。
次の例では、sys.getrefcount()
を使って、True
オブジェクトが参照されている数を調べています
Pythonで最も有名なライブラリの一つに、Numpy があります。Numpyは科学技術計算、機械学習、AI、画像処理など、多岐にわたる分野で利用され、今日のPythonの普及に大きく貢献しています。
Numpyは独立したライブラリですが、もともとはPythonの標準ライブラリに組み込む予定で開発が始まりました。しかし、プロジェクトが大規模化したため、最終的に独立したライブラリとして提供されることになりました。この経緯から、NumpyはPython言語と密接な関係を持ち、その設計や実装に大きな影響を与えてきまし