Python

読みやすさを重視した汎用プログラミング言語で、データサイエンス、AI、Web 開発で広く使われる

プログラミング言語データ分析
Python」の技術書を見る →

Python とは

Python は、Guido van Rossum が設計した汎用プログラミング言語で、読みやすさとシンプルさを重視した設計が特徴だ。公式ドキュメントの沿革では 1990 年代初頭にオランダの CWI で ABC という言語の後継として作られたとされ、作者自身が公開した年表では 1989 年 12 月に実装が始まり、1991 年 2 月 20 日に 0.9.0 が公開されたと記録されている。データサイエンス機械学習、Web 開発、自動化スクリプトで広く使われている。

バージョンの刻み方には規則がある。3.10 以降は毎年 10 月に機能リリースが出て、各系列はリリースから 5 年でサポートが終わる (最初の 2 年がバグ修正、残りはセキュリティ修正のみ)。2026 年 8 月時点の安定版は 3.14 系 (3.14.7) で、3.14 の初回リリースは 2025 年 10 月 7 日、サポート終了は 2030 年 10 月が予定されている。「Python 3」と一括りにせず、どの系列を前提にするかを先に決めておくと、使える構文とライブラリの対応範囲が確定する。

特徴

Python は波括弧ではなくインデントでブロックを定義するインデントベースの構文を持ち、コードの見た目が統一される。動的型付けで変数に型宣言が不要だが、Python 3.5 以降は型ヒントを任意で付与できる。「バッテリー同梱」の思想で標準ライブラリが豊富な一方、既定のビルドでは GIL (Global Interpreter Lock) が CPU を使う処理のスレッド並列を妨げる。

GIL と並列処理

GIL は、1 つのインタプリタの中で Python のバイトコードを実行できるスレッドを常に 1 つへ限るロックだ。このため計算主体の処理はスレッドを増やしても速くならず、複数コアを使い切るには multiprocessing でプロセスを分けるか、計算を GIL を手放す C 拡張 (NumPy の行列演算など) に任せる形になる。逆にネットワークやファイルの待ち時間は GIL が解放されるため、待ち中心の処理ではスレッドや asyncio が素直に効く。ここを取り違えると、スレッドを足したのに速くならない、プロセスを分けたのにメモリだけ増えるという結果になる。

この制約自体は動いている。GIL を無効化できる free-threaded ビルドが 3.13 で PEP 703 の実験的機能として入り、3.14 では PEP 779 により公式サポートへ格上げされた。ただし 2026 年 8 月時点で通常配布されるビルドは GIL 有効のままで、free-threaded は別のビルドを選んで使う。手元の 3.13 で sysconfig.get_config_var('Py_GIL_DISABLED') は 0、sys._is_gil_enabled() は True を返し、既定ビルドが GIL 側であることを確認できる。実行環境側の対応も途上で、Lambda の管理ランタイムでは単一スレッド性能への影響を理由に free-threading が無効化されている。当面は「既定は GIL あり」を前提に設計し、free-threaded は測ってから採用する順序が安全だ。

TypeScript / Go との比較

3 つの言語は得意分野が違う。選定で効くのは表の実行速度そのものより、必要なライブラリがどちらの生態系にあるか、そして型の強制をどこまで求めるかだ。

観点PythonTypeScriptGo
型システム動的 (型ヒント任意)静的静的
実行速度遅い (バイトコードへ変換しインタプリタが実行)中程度 (V8 JIT)速い (ネイティブ)
並行処理asyncio, multiprocessingasync/awaitgoroutine
パッケージ管理pip, uv, PoetrynpmGo Modules
用途データサイエンス、AIWeb アプリサーバー、CLI

型ヒント

型ヒントは 3.5 で PEP 484 として導入され、その後も書き方が増えている。次の例では、引数と戻り値の注釈は 3.5 以降で動くが、type から始まる型エイリアスの宣言は 3.12 で追加された構文 (PEP 695) だ。

def greet(name: str, age: int) -> str:
    return f"Hello, {name}! You are {age} years old."

# ジェネリクス
type Point[T] = tuple[T, T]

# TypedDict
from typing import TypedDict

class User(TypedDict):
    id: str
    name: str
    email: str

mypy で型チェックを実行する。TypeScript と異なり、実行時に型ヒントは検査されない。外部から受け取った値が宣言どおりかは保証されないため、API の入力検証には pydantic のような実行時に検証する仕組みを別に用意する。型ヒントは人と静的解析器に向けた宣言であり、実行時の防壁ではない。

データサイエンスのエコシステム

数値計算の土台を NumPy が一手に担い、その上に分析・機械学習・可視化が積み上がっているのが Python の強みだ。どれか 1 つを選ぶ話ではなく、下の層 (配列とその演算) を共有しているために組み合わせが効く。

ライブラリ用途
NumPy数値計算、行列演算
pandasデータ分析、DataFrame
scikit-learn機械学習
PyTorch / TensorFlowディープラーニング
matplotlib / seabornデータ可視化
Jupyter Notebook対話的な分析環境

Lambda の管理ランタイムには boto3 (AWS SDK for Python) が同梱されるが、その版はランタイムのバージョンとリージョンによって変わると公式ドキュメントに明記されている。追加されたばかりの API を呼ぶ場合は、デプロイパッケージか Layer に自分で boto3 を含めて版を固定する。

採否の判断

Python を選ぶ理由がはっきりしているのは、数値計算・機械学習・データ処理のライブラリを使いたい場合と、書き捨ての自動化を短く書きたい場合だ。逆に、1 プロセスで多数のコアを使い切る計算や、起動の速さと省メモリが要求される場面では不利になりやすい。型の緩さが不安に見えるときも、型ヒントと mypy を最初から必須にすれば静的検査は得られる。埋まらないのは実行時に型が検査されない点だけで、そこは入力検証の設計で補う。

この記事は役に立ちましたか?

関連用語

関連する記事