本記事はPythonの型ヒントの書き方に関する記事です.
以下の2パターンについて確認します.
- 関数の戻り値が複数ある場合
- 引数によって戻り値が変わる場合
関数の戻り値が複数ある場合
戻り値が2つある場合の関数を見てみましょう.
何らかの文字列を引数として与えると,引数の文字と引数の文字数が返ってくる関数です.
# 型ヒントがない関数
def return_2values(moji):
return moji, len(moji)
この関数を実行して戻ってくる値を見てみます.
result = return_2values('管理人')
print(result) # 戻り値
print(type(result)) # 戻り値のデータ型
print([type(i) for i in result]) # tuple内のデータ型
('管理人', 3) <class 'tuple'> [<class 'str'>, <class 'int'>]
それぞれの結果は以下のとおりです.
- 戻り値:
return moji, len(moji)
の結果です. - 戻り値のデータ型:
tuple
となっています. - tuple内のデータ型:それぞれ
str
型,int
型(='管理人', 3
)です.
上記を踏まえて,型ヒントをつけてみましょう.
型ヒントをつけるにはPython組み込みのtyping
モジュールを使用します.
from typing import Tuple
# 型ヒントをつけた関数
def return_2values(moji: str) -> Tuple[str, int]:
return moji, len(moji)
型ヒントをつけることで以下のような内容を表現しています.
- 引数に取るデータは
str
型 - この関数を実行した結果の戻り値は
tuple
で要素はstr
型とint
型
この程度の関数であれば型ヒントがなくてもわかりますが,複雑な関数などは型ヒントがあると理解の助けになります.
型ヒントのチェック
型ヒントの記法を判定する外部ライブラリmypy
を使って関数をチェックしてみましょう.
参考
mypy
をインストールしていない場合は以下のコマンドでインストール可能です.
pip install mypy
確認したい関数を.py
ファイルに保存して以下のmypy
コマンドでチェックを行います.
(以下の例ではhoge.py
に型ヒント付きの関数が記載されている想定です1)
mypy hoge.py
Success: no issues found in 1 source file
記法上,問題ないことが確認できました!
(もし何らかの誤りがあるとerror
が発生します)
引数によって戻り値が変わる場合
条件分岐などで関数の戻り値が変わるパターンです.
以下の関数は引数の文字数に応じて文字列(str
型)か文字数(int
型)を返す関数です.
from typing import Tuple, Union
def return_diff_values(moji: str) -> Union[str, int]:
if len(moji) > 5:
return moji
else:
return len(moji)
このように条件に応じて戻り値のデータ型が変わる場合,戻り値の型ヒントは以下のようにします.
Union[戻り値のパターン①, パターン②, ...]
上記の関数の場合はstr
型かint
型を返すのでUnion[str, int]
としています.
(関数の実行によって戻ってくる値はstr
かint
という表現です)
参考
以下は上記の関数の実行例です.
# 「管理人」は3文字なので文字数が返ってくる
print(return_diff_values('管理人'))
print(type(return_diff_values('管理人')))
3 <class 'int'>
# 「管理人のかに」は6文字なので文字が返ってくる
print(return_diff_values('管理人のかに'))
print(type(return_diff_values('管理人のかに')))
管理人のかに <class 'str'>
ひとこと
複雑な関数には型ヒントをつけよう・・・
でも記法に従っていると逆にごちゃごちゃすることもあるので,どこまでやるかは考えものですね・・・
-
以下のコマンドは
mypy
コマンドを実行する場所がhoge.py
と同じ階層であることが前提です.hoge.py
が別の場所にある場合はそのpathを指定してください(例:mypy ./xxx/hoge.py
) ↩