型アノテーションの基礎
変数、関数パラメーター、戻り値の型にアノテーションを付けます。
「型アノテーションの基礎」は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 hereTYPE_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フィードバックを取得できます。ローカル設定は不要です。