0Pricing
Python Academy · レッスン

複合型: 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, str

Dict と 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)   # 1

Tupleのアノテーション

固定長の場合: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: float

Optional[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 error

TypedDict

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 4

Any と 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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 型アノテーションの基礎
  2. 複合型: List、Dict、Optional、Union
  3. TypeVar、ジェネリッククラス、Protocol
  4. mypy の実行と型エラーの修正
← Python Academyに戻る