Python

【Python】第3章第12回:関数の型アノテーション

本記事では、Pythonにおける型アノテーションの基本とその活用方法について解説します。型アノテーションを使用することで、コードの可読性を向上させ、バグの予防にも役立てることができます。

0. 記事の概要

この記事を読むメリット

  • 型アノテーションの基本を理解:型を明示的に記述することで、コードの意図を正確に伝えられます。
  • 静的解析ツールの活用:エラーの早期発見が可能になります。
  • チーム開発での効率向上:型情報を共有することで、他の開発者がコードを理解しやすくなります。

この記事で学べること

  • 型アノテーションの基本的な書き方
  • 実践的な型アノテーションの使用例
  • Python 3.9以降の新しい型ヒント

1. 型アノテーションの基本

1.1 型アノテーションとは?

型アノテーションとは、関数の引数や戻り値の型を明示的に記述する機能です。コードの可読性が向上し、静的解析ツールを使用してエラーを検出する際に役立ちます。

# 型アノテーションの基本例
def add_numbers(a: int, b: int) -> int:
    """
    2つの整数を加算する関数。

    Args:
        a (int): 加算する整数。
        b (int): 加算する整数。

    Returns:
        int: 加算結果。
    """
    return a + b

result = add_numbers(10, 20)
print(f"加算結果: {result}")
動作解説
  1. a: intb: intで引数の型を指定しています。
  2. -> intは関数の戻り値の型を示しています。
  3. 型アノテーションがあることで、引数や戻り値の期待される型が明確になります。

2. 実践的な型アノテーションの使用例

2.1 リストや辞書の型ヒント

Pythonでは、リストや辞書の型を明示することができます。以下はその例です。

# リストと辞書の型アノテーション
from typing import List, Dict

def process_students(students: List[Dict[str, int]]) -> float:
    """
    学生の成績を処理し、平均点を計算する関数。

    Args:
        students (List[Dict[str, int]]): 学生名と成績を含む辞書のリスト。

    Returns:
        float: 平均点。
    """
    total = sum(student["score"] for student in students)
    return total / len(students)

students_data = [{"name": "Alice", "score": 90}, {"name": "Bob", "score": 85}]
print(f"平均点: {process_students(students_data)}")
動作解説
  1. List[Dict[str, int]]でリスト内の要素が辞書であり、キーが文字列、値が整数であることを示しています。
  2. 関数は辞書リストを受け取り、学生の平均点を計算します。

2.2 Python 3.9以降の新しい型ヒント

Python 3.9以降では、ListDictの代わりに組み込み型の角括弧表記が使用できます。

# Python 3.9以降の型ヒント
def process_numbers(numbers: list[int]) -> int:
    """
    数値リストの合計を計算する関数。

    Args:
        numbers (list[int]): 数値リスト。

    Returns:
        int: 合計値。
    """
    return sum(numbers)

print(process_numbers([1, 2, 3, 4, 5]))

3. 型アノテーションの注意点と活用方法

3.1 動的型付けのメリットとのバランス

型アノテーションは、Pythonの動的型付けの柔軟性を損なわない範囲で使用するのが理想的です。

3.2 静的解析ツールの活用

型アノテーションを記述することで、mypyなどのツールを使用してコードの型チェックが可能になります。

4. 練習問題

以下の課題に挑戦してみましょう。

  1. リスト内の文字列を大文字に変換する関数に型アノテーションを記述してください。
  2. 辞書内の値を合計する関数に型アノテーションを記述してください。

5. 練習問題の解答と解説

問1の解答例

# リスト内の文字列を大文字に変換
def to_uppercase(strings: list[str]) -> list[str]:
    """
    文字列リストを大文字に変換する関数。

    Args:
        strings (list[str]): 文字列リスト。

    Returns:
        list[str]: 大文字に変換された文字列リスト。
    """
    return [s.upper() for s in strings]

print(to_uppercase(["python", "is", "awesome"]))

問2の解答例

# 辞書内の値を合計
def sum_values(data: dict[str, int]) -> int:
    """
    辞書内の値を合計する関数。

    Args:
        data (dict[str, int]): キーが文字列、値が整数の辞書。

    Returns:
        int: 値の合計。
    """
    return sum(data.values())

print(sum_values({"a": 10, "b": 20, "c": 30}))

6. まとめ

型アノテーションは、Pythonの柔軟性を保ちながらコードの品質を向上させる強力なツールです。練習問題を通じて、型アノテーションを活用するスキルを磨いてください。