Pythonのタイプヒントを徹底解説!
Pythonのタイプヒントは、変数や関数の引数、戻り値がどのようなデータ型(例: str
や int
)を期待しているかをコード内に明記するためのメモ書きのようなものです。🏷️
一番大事なのは、このヒントはあくまで「ヒント」であり、Pythonのプログラム実行自体には何の影響も与えないということです。書かなくてもコードは動きますし、書いてあってもPythonがそれを強制することはありません。
なぜタイプヒントを使うのか?
実行に影響しないなら、なぜわざわざ書くのでしょうか?それには、計り知れないメリットがあるからです。
- コードの可読性が劇的に向上する関数の定義を見ただけで、その関数がどんなデータを必要とし、どんなデータを返すのかが一目瞭然になります。これは、未来の自分や他のチームメンバーにとって最高のドキュメントになります。
- バグを事前に発見できる 🧐Mypyのような静的解析ツールを使うと、コードを実行する前に「この関数には数値を渡すべきなのに、文字列が渡されていますよ!」といった型の間違いを自動で検出してくれます。これにより、多くのバグを未然に防げます。
- エディタのサポートが強力になるVS Codeなどのコードエディタはタイプヒントを解釈し、より正確な自動補完やエラー警告を表示してくれます。例えば、変数がstr型だと分かっていれば、.upper()のような文字列専用のメソッドを候補に出してくれます。
基本的な書き方 ✍️
タイプヒントの書き方はとても直感的です。
変数の場合
変数名の後にコロン:
を書き、その後に型を記述します。
user_name: str = "Yusei"
user_age: int = 28
is_active: bool = True
関数の場合
関数の引数には変数と同じように、戻り値には ->
の後に型を記述します。戻り値がない関数は -> None
と書くのがお作法です。
# name引数はstr型、戻り値もstr型
def greet(name: str) -> str:
return f"Hello, {name}"
# message引数はstr型、戻り値はない
def print_message(message: str) -> None:
print(message)
もう少し複雑な型
リストや辞書など、コンテナの型を指定するには typing
モジュールを使うと便利です。(Python 3.9以降は、list
やdict
をそのまま使えます)
from typing import Optional
# 整数のリスト
scores: list[int] = [100, 85, 90]
# 文字列をキーとし、値が文字列または数値の辞書
# `|` は「または」を意味します
user: dict[str, str | int] = {"name": "Yusei", "age": 28}
# 文字列またはNoneを返す可能性がある関数
# Optional[str] は str | None と同じ意味です
def find_user(user_id: int) -> Optional[str]:
if user_id == 1:
return "Yusei"
else:
return None
まとめ
タイプヒントは、現代のPython開発において必須のスキルと言っても過言ではありません。
- コードを分かりやすくする「注釈」である。
- 実行には影響しないが、開発体験を大きく向上させる。
- Mypyなどのツールと組み合わせることで、バグを減らせる。
最初は少し面倒に感じるかもしれませんが、小さなプロジェクトからでも書く習慣をつけることで、将来的に大規模なアプリケーションを開発する際に必ずその恩恵を感じるはずです。ぜひ今日から使ってみてください!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。