はじめに
Pythonは動的型付けの言語ですが、Pythonの型ヒントはPython 3.5以降バージョンを重ねるごとに進化し続けています。
型アノテーション(型ヒント)と上手く付き合うことで、実装コードの書きやすさや可読性が向上し、個人開発・チーム開発どちらでも型ヒントを導入することでたくさんの恩恵を受けることができるでしょう。
本記事では、Pythonの型定義について初心者向けに解説します。
型ヒント導入のメリット
-
可読性の向上
型を明示することで、コードの意図を他人や未来の自分に伝えやすくなります -
バグの早期発見
mypyなどの静的解析ツールと併用することで、潜在的な型エラーを実行前に検出することができます -
補完の強化
IDE(例: PyCharm, VSCode)が型情報を元に補完や警告を提供してくれます
以下VSCodeですが、型ヒントを書くことでIDEの補完が機能してくれます。
補完は開発者体験に大きく関わるので型定義は大事です。
変数の型定義
name: str = "山田"
age: int = 30
height: float = 1.75
is_student: bool = False
phone_number: str # 代入せずに型ヒントだけ定義することもできます
関数の型定義
関数の引数や戻り値にも型を指定できます。
-> <型>
が戻り値の型ヒントです。
def greet(name: str) -> str:
return f"Hello, {name}!"
型ヒントを付けることで、この関数はname
に文字列を受け取り、文字列を返すことが明示されます。
コレクション型
リスト、辞書、タプルなどのコレクション型にはそれぞれList
, Dict
, Tuple
を使用します。
from typing import List, Dict, Tuple
names: List[str] = ["山田", "佐藤"]
data: Dict[str, int] = {"山田": 25, "佐藤": 30}
pair: Tuple[str, int] = ("山田", 25)
Python 3.9で、組み込み型(list,dict,など)に対して直接型引数を指定できる機能が追加されました。これにより以下のように簡潔に記述が可能です。
names: list[str] = ["山田", "佐藤"]
data: dict[str, int] = {"山田": 25, "佐藤": 30}
pair: tuple[str, int] = ("山田", 25)
Union型
複数の型を受け入れる場合はUnion
を使用します。
from typing import Union
data: Union[int, str]
Python3.10以降はUnion
を|
に簡略化可能です。
from typing import Union
data: int | str
Optional型
値がNone
になる可能性がある場合はOptional
を使用します。
from typing import Optional
data: Optional[str]
Python3.10以降の|
を使用して以下のように表現することもできます。
from typing import Optional
data: str | None
まとめ
型アノテーションはコードの品質向上やバグ防止に非常に有効です。
本記事を参考に、ぜひ型アノテーションを日々の開発に取り入れてみてください!