0Pricing
Python Academy · レッスン

型アノテーションの基礎

変数、関数パラメーター、戻り値の型にアノテーションを付けます。

「型アノテーションの基礎」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

型アノテーションとは

型アノテーションは、変数、パラメータ、戻り値に期待される型を宣言するためのヒントです。実行時には強制されず、mypyなどの型チェッカーによって読み取られます。

def greet(name: str) -> str:
    return f"Hello, {name}"

result: str = greet("Alice")
print(result)

変数アノテーション

モジュールレベル、クラスレベル、またはローカルの変数には、コロンに続けて型を指定してアノテーションを付けます。

count: int = 0
pi: float = 3.14159
name: str = "Python"
flag: bool = True

# Annotation without assignment (declaration only)
future_value: int

関数パラメータのアノテーション

関数シグネチャの各パラメータにアノテーションを付けます。戻り値の型には -> type を使用します。

def add(a: int, b: int) -> int:
    return a + b

def repeat(text: str, times: int = 1) -> str:
    return text * times

def no_return() -> None:
    print("side effect only")

組み込みコレクション型(Python 3.9以降)

Python 3.9以降では、小文字の組み込み型をジェネリックとして直接使用します。例:list[int]、dict[str, int]、tuple[int, ...]。

def total(numbers: list[int]) -> int:
    return sum(numbers)

def config() -> dict[str, str]:
    return {"host": "localhost", "port": "8080"}

def coords() -> tuple[float, float]:
    return (1.0, 2.0)

Optional と Union

X | None(Python 3.10以降)または Optional[X] は、値が X または None になり得ることを意味します。X | Y は、X または Y になり得ることを意味します。

from typing import Optional

def find(items: list[int], target: int) -> int | None:
    return next((x for x in items if x == target), None)

# Older style:
# def find(...) -> Optional[int]:

Union型

int | str(Python 3.10以降)または Union[int, str] は、値が複数の型のいずれかになり得ることをアノテーションで示します。

from typing import Union

def process(value: int | str) -> str:
    return str(value)

# Older style:
# def process(value: Union[int, str]) -> str:

型エイリアス

型式を名前に代入して再利用可能なエイリアスを作成すると、コードの可読性が向上します。

from typing import TypeAlias

Vector: TypeAlias = list[float]
Matrix: TypeAlias = list[Vector]

def dot(a: Vector, b: Vector) -> float:
    return sum(x * y for x, y in zip(a, b))

Callableアノテーション

引数として渡す関数には、Callable[[arg_types], return_type] を使用してアノテーションを付けます。

from typing import Callable

def apply(func: Callable[[int, int], int], x: int, y: int) -> int:
    return func(x, y)

result = apply(lambda a, b: a + b, 3, 4)
print(result)  # 7

*args と **kwargs のアノテーション

*args には要素の型(タプルの型ではありません)を、**kwargs には値の型を指定してアノテーションを付けます。

def log(*messages: str, level: str = "INFO") -> None:
    for msg in messages:
        print(f"[{level}] {msg}")

def configure(**options: int) -> None:
    for key, val in options.items():
        print(f"{key}: {val}")

from __future__ import annotations

ファイルの先頭にこのインポートを追加すると、アノテーションの評価を延期できます。これにより、引用符なしで前方参照を使用できます。

from __future__ import annotations

class Node:
    def __init__(self, value: int, next: Node | None = None):
        self.value = value
        self.next = next   # forward ref to Node works here

TYPE_CHECKINGガード

型チェック時にのみ型をインポートし、実行時にはインポートしないようにすると、循環インポートや負荷の大きいインポートを回避できます。

from __future__ import annotations
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from mymodule import HeavyClass

def process(obj: HeavyClass) -> None:
    ...   # HeavyClass not imported at runtime

確認問題

関数が何も返さないことを示すアノテーション構文は何ですか。

まとめ

変数には name: Type、パラメータには param: Type、戻り値には -> Type を指定してアノテーションを付けます。コレクションには list[T] や dict[K,V](Python 3.9以降)を使用し、X | None(Python 3.10以降)や from __future__ import annotations を前方参照に使用します。

よくある質問

「型アノテーションの基礎」レッスンは無料ですか?

はい。「型アノテーションの基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「型アノテーションの基礎」で何を学びますか?

変数、関数パラメーター、戻り値の型にアノテーションを付けます。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「型アノテーションの基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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