Pythonで関数に型ヒントをつける (Python 3.5以降)
この記事ではPython 3.5以降で導入された関数への型ヒントの付け方、メリット、そして活用方法について解説します。型ヒントによるコードの可読性向上、バグの早期発見、静的解析ツールの活用方法を学びます。
目次
型ヒントの基礎
Pythonは動的型付け言語ですが、3.5以降、型ヒントを用いて変数や関数の型を指定できるようになりました。型ヒントは実行時の型チェックには使用されませんが、コードの可読性向上や静的解析ツールによるバグ検出に役立ちます。
name: str = "Alice"
age: int = 30
上記の例では、変数`name`は文字列型、`age`は整数型であることを示しています。`=`の右側は初期値です。型ヒントは`:`の後に記述します。
関数の型ヒント
関数の引数と戻り値の型を指定することで、関数のインターフェースを明確に記述できます。
def greet(name: str) -> str:
return "Hello, " + name
print(greet(name="Bob"))
この例では、`greet`関数は文字列型の引数`name`を受け取り、文字列型を返します。`->`の後に戻り値の型を指定します。
戻り値の型ヒント
関数の戻り値の型を指定するには、`->`の後に型を記述します。複数の戻り値がある場合は、`Tuple`を使用します。
from typing import Tuple
def get_user(id: int) -> Tuple[str, int]:
return "Bob", 30
name, age = get_user(id=1)
print(name, age)
この例では、`get_user`関数は`Tuple[str, int]`型、つまり文字列と整数のタプルを返します。
複数の戻り値
関数が複数の値を返す場合、戻り値の型ヒントには`typing.Tuple`を使います。
from typing import Tuple
def get_data() -> Tuple[int, str, bool]:
return 1, "hello", True
number, text, boolean = get_data()
print(number, text, boolean)
この例では、`get_data()`関数は整数、文字列、ブール値のタプルを返します。
オプション引数とデフォルト値
オプション引数(デフォルト値を持つ引数)の型ヒントは通常の引数と同じです。
def calculate(x: int, y: int = 0) -> int:
return x + y
print(calculate(5))
print(calculate(5, 3))
この例では、`y`はオプション引数で、デフォルト値は0です。
リスト、辞書などの型ヒント
リスト、辞書などのコレクション型の型ヒントには`typing`モジュールを使用します。
from typing import List, Dict
def process_data(data: List[int]) -> Dict[str, int]:
return {"sum": sum(data)}
print(process_data([1, 2, 3]))
この例では、`process_data`関数は整数型のリストを受け取り、文字列をキー、整数を値とする辞書を返します。
型ヒントと静的解析
MyPyなどの静的解析ツールを使うことで、型ヒントに基づいてコードの型エラーを検出できます。
def add(a: int, b: int) -> int:
return a + b
result = add(5, "10") # 型エラー
MyPyを実行すると、`add`関数への引数の型が間違っていることを検出します。
型ヒントのメリットとデメリット
型ヒントを使用するメリットは、コードの可読性向上、バグの早期発見、コードのメンテナンス容易化です。デメリットは、記述が冗長になる可能性がある点です。しかし、大規模なプロジェクトやチーム開発では、型ヒントによるメリットの方が大きくなります。