複合型: List、Dict、Optional、Union
typing モジュールのジェネリック型と Optional/Union を正しく使います。
「複合型: List、Dict、Optional、Union」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
typingモジュールの概要
Python 3.9より前は、List、Dict、Tuple などのジェネリック型は typing から提供されていました。3.9以降は、組み込み型を直接使用できます。
from typing import List, Dict, Tuple, Optional, Union
# Python 3.9+: use list[int], dict[str,int] directly
# Python 3.8-: use typing.List[int], typing.Dict[str,int]List と Sequence
可変シーケンスには list[T] を使用し、リスト、タプル、文字列など、任意の順序付きシーケンスを受け取る場合は Sequence[T] を使用します。
from typing import Sequence
def total(nums: list[int]) -> int:
return sum(nums)
def first(items: Sequence[str]) -> str:
return items[0] # works with list, tuple, strDict と Mapping
可変ディクショナリには dict[K,V] を使用し、読み取り専用のディクショナリ型オブジェクトには Mapping[K,V] を使用します。
from typing import Mapping
def lookup(data: Mapping[str, int], key: str) -> int | None:
return data.get(key)
result = lookup({"a": 1, "b": 2}, "a")
print(result) # 1Tupleのアノテーション
固定長の場合:tuple[int, str, float]。可変長の場合:tuple[int, ...]。
def point() -> tuple[float, float]:
return (1.0, 2.0)
def first_n(n: int) -> tuple[int, ...]:
return tuple(range(n))
# Named tuple with types:
from typing import NamedTuple
class Point(NamedTuple):
x: float
y: floatOptional[T]
Optional[T] は T | None の省略形です。パラメータが省略可能な場合に適した選択です。
from typing import Optional
def find_user(user_id: int) -> Optional[dict[str, str]]:
db: dict[int, dict[str, str]] = {
1: {"name": "Alice"}
}
return db.get(user_id)Union型
複数の型のいずれかになり得る値には、Union[X, Y] または X | Y(3.10以降)を使用します。
from typing import Union
def stringify(value: Union[int, float, str]) -> str:
return str(value)
# Python 3.10+:
def stringify2(value: int | float | str) -> str:
return str(value)Literal型
Literal["a","b","c"] は、値を特定のリテラル集合に制限します。
from typing import Literal
Mode = Literal["read", "write", "append"]
def open_file(path: str, mode: Mode) -> None:
with open(path, mode):
pass
open_file("data.txt", "read") # ok
# open_file("data.txt", "exec") # mypy errorTypedDict
TypedDict は、各キーが特定の型に対応するディクショナリの形状にアノテーションを付けます。
from typing import TypedDict
class User(TypedDict):
name: str
age: int
email: str | None
def greet(user: User) -> str:
return f"Hello, {user['name']}"
alice: User = {"name": "Alice", "age": 30, "email": None}Set と FrozenSet
集合には set[T]、フローズンセットには frozenset[T] を使用してアノテーションを付けます。
def unique(items: list[int]) -> set[int]:
return set(items)
def allowed_methods() -> frozenset[str]:
return frozenset({"GET", "POST", "DELETE"})Iterable と Iterator
ループ処理できる任意のオブジェクトには Iterable[T] を使用し、__next__ を持つオブジェクトには Iterator[T] を使用します。
from typing import Iterable, Iterator
def evens(numbers: Iterable[int]) -> Iterator[int]:
return (n for n in numbers if n % 2 == 0)
for n in evens([1, 2, 3, 4, 5]):
print(n) # 2 4Any と NoReturn
Any は、その値について型チェックを行わないことを示します。NoReturn は、決して戻らない関数(常に例外を発生させるか、無限ループする関数)を示します。
from typing import Any, NoReturn
def accept_all(x: Any) -> None:
print(x)
def crash(msg: str) -> NoReturn:
raise RuntimeError(msg) # never returns normally確認問題
Optional[str] は何を意味しますか。
まとめ
コレクションには list[T]、dict[K,V]、tuple[T,...] を使用します。Optional[T] は T | None と同じ意味です。複数の型には Union[X,Y] または X|Y を使用します。特定の値には Literal、型付きディクショナリの形状には TypedDict、型チェックを行わない値には Any を使用します。
よくある質問
「複合型: List、Dict、Optional、Union」レッスンは無料ですか?
はい。「複合型: List、Dict、Optional、Union」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「複合型: List、Dict、Optional、Union」で何を学びますか?
typing モジュールのジェネリック型と Optional/Union を正しく使います。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「複合型: List、Dict、Optional、Union」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 型アノテーションの基礎
- 複合型: List、Dict、Optional、Union
- TypeVar、ジェネリッククラス、Protocol
- mypy の実行と型エラーの修正