Python

【Python】第1章第13回:Pythonの型ヒント(type hints)の基礎

Python 3.5以降では型ヒント(type hints)が導入され、コードの可読性や保守性が向上しました。本記事では、型ヒントの基本から応用までを解説します。

0. 記事の概要

この記事を読むメリット

  • 型ヒントの基本を理解:Pythonでの型ヒントの記述方法を学べます。
  • 実用的なスキルを取得:型ヒントを活用して、エラーを防ぎやすいコードを書く方法を学べます。
  • チーム開発での有効活用:型ヒントを使用することで、他の開発者とスムーズにコードを共有できます。

この記事で学べること

  • 型ヒントの基本的な使い方
  • 型エイリアスやジェネリクスの活用
  • mypyを使用した型チェックの実践方法

1. 型ヒントの基本

1.1 型ヒントの基本的な記述方法

型ヒントは、関数の引数や戻り値に期待されるデータ型を明示するために使用します。

# 型ヒントの基本
def add_numbers(a: int, b: int) -> int:
    return a + b

result = add_numbers(10, 20)
print(result)  # 出力: 30
動作解説
  1. 型ヒントを使用すると、関数の引数や戻り値のデータ型が明確になります。
  2. Pythonは動的型付け言語ですが、型ヒントを使用するとコードの意図が明確になり、エラーを減らすことができます。

1.2 型ヒントの基本データ型

型ヒントで使用できる主な基本データ型を以下に示します。

  • int: 整数
  • float: 浮動小数点数
  • str: 文字列
  • bool: 真偽値
  • None: 何も返さない場合

2. 型ヒントの応用

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

リストや辞書の型ヒントには、ListDictを使用します。

# リストと辞書の型ヒント
from typing import List, Dict

def process_items(items: List[int]) -> Dict[int, str]:
    return {item: str(item) for item in items}

result = process_items([1, 2, 3])
print(result)  # 出力: {1: '1', 2: '2', 3: '3'}
動作解説
  1. List[int]: 整数型のリストを受け取ることを示します。
  2. Dict[int, str]: 整数をキーとし、文字列を値とする辞書を返すことを示します。

2.2 可変長引数の型ヒント

可変長引数の型ヒントには、*args**kwargsを使用します。

# 可変長引数の型ヒント
from typing import Any

def print_items(*args: Any, **kwargs: Any) -> None:
    print(args)
    print(kwargs)

print_items(1, "apple", key="value")
動作解説
  1. Any: 任意の型を受け入れることを示します。
  2. 可変長引数に型ヒントを付けることで、柔軟な関数定義が可能になります。

3. 実践例:型ヒントを活用したプログラム

型ヒントを活用して、商品の在庫管理を行うプログラムを作成します。

# 型ヒントを活用した在庫管理
from typing import Dict

def update_stock(stock: Dict[str, int], item: str, quantity: int) -> Dict[str, int]:
    stock[item] = stock.get(item, 0) + quantity
    return stock

inventory = {"apple": 10, "banana": 5}
updated_inventory = update_stock(inventory, "apple", 3)
print(updated_inventory)  # 出力: {'apple': 13, 'banana': 5}
動作解説
  1. 型ヒントを使って、関数の入力と出力を明示します。
  2. 辞書の更新ロジックを簡潔に記述します。

4. 練習問題

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

  1. 整数のリストを受け取り、その平均値を返す関数を型ヒント付きで作成してください。
  2. リスト内の文字列をすべて大文字に変換する関数を型ヒント付きで作成してください。

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

問1の解答例

# 平均値を計算する関数
from typing import List

def calculate_average(numbers: List[int]) -> float:
    return sum(numbers) / len(numbers)

print(calculate_average([10, 20, 30]))  # 出力: 20.0

問2の解答例

# リスト内の文字列を大文字に変換
from typing import List

def to_uppercase(strings: List[str]) -> List[str]:
    return [s.upper() for s in strings]

print(to_uppercase(["apple", "banana", "cherry"]))  # 出力: ['APPLE', 'BANANA', 'CHERRY']

6. まとめ

Pythonの型ヒントを使うことで、コードの可読性と保守性が向上します。型ヒントは特にチーム開発や大規模プロジェクトで役立つので、積極的に活用してみてください。