型ヒントの基礎
型ヒントの基礎
🎯 このlessonを読み終えたら
このlessonを読み終えると、以下の3つを自信を持って行えるようになります。
- ▸✅ typing.Optional · Union · Literal · TypedDictの使用
- ▸✅ mypy --strictを通過させるパターン
- ▸✅ Generic + TypeVarで再利用可能な型
学習目標をチェックリストとして手元に置き、すべて答えられるようになったらlessonを閉じてください。
型ヒント — コード + 実行結果
x: int = 変数・関数への型アノテーション。Python 3.5+(PEP 484)。ランタイムへの影響なし。IDEとmypyが活用します。
1. 関数への型
⚠️ Pythonは型ヒントを強制しません。あくまでアノテーションです。mypy・pyrightが静的検査を担います。
2. よく使う型
scores: list[int] = [85, 92, 78] # 3.9+
person: dict[str, int] = {"name": 1} # 3.9+
coords: tuple[float, float] = (37.5, 127.0)
tag_set: set[str] = {"a", "b"}
pythondef find(name: str) -> str | None: # 3.10+ — | を使用
return data.get(name)
# 3.9以下では
from typing import Optional
def find(name: str) -> Optional[str]:
return data.get(name)
# Union — 複数の型を許容
def process(x: int | str) -> str: # 3.10+
return str(x)
pythonfrom typing import Callable
# 関数を受け取る関数
def apply(f: Callable[[int], int], x: int) -> int:
return f(x)
result = apply(lambda n: n * 2, 5) # 10
pythonfrom dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
friends: list["Person"] = None # 前方参照
def greet(p: Person) -> str:
return f"こんにちは {p.name}"
bash$ pip install mypy
$ mypy my_file.py
# error: Argument 1 to "add" has incompatible type "str"; expected "int"
``
一行まとめ
def f(x: T) -> R: + list[int] + str | None` の3つで90%をカバーできます。
💡 重要ポイント
1. 型ヒントはあくまでヒントであり、強制ではありません
2. Python 3.9+: list[str], dict[str, int]
3. Python 3.8以下: from typing import List, Dict
Pythonは簡潔で読みやすい文法が特徴で、幅広い分野で活用されています。インタープリタ言語であるため、REPL環境で即時実行が可能です。PEP 8コーディングスタイルガイドに従い、Black/autopep8で自動フォーマットができます。型ヒント(type hints)によりコードの可読性とIDEサポートが向上します。パッケージ管理はpip、仮想環境はvenv/condaで構築します。
🐍 実際に試してみよう — 型ヒントの基礎
🤖 AIへのリクエスト例
このlessonの概念を知っていれば、AIに具体的に指示できます。曖昧な「直して」ではなく、語彙を持ったリクエストができる — それがトークン節約の出発点です。
- ▸「この関数シグネチャにtyping.Optional · Literal · TypedDictを使って、精密な型付けをしてください」
- ▸「このコードがmypy --strictを通過するよう、型を補強してください」
なぜこれがトークンを減らすのか
概念を知らないと、AIの回答を受け取った後に「それは何ですか?」と再度聞かなければなりません。その「再質問」がトークンを消費します。概念を一度習得しておけば、会話が一度で完結します。