見出し画像

Python_型(タイプ)ヒントの書き方と検証方法 #205日目

本日はPythonでチーム開発する際に必要な「タイプヒント」に関してまとめて見たいと思います。

Pythonにはint型やfloat型、str型など、文字の型が存在しています。そして意図した型と別の型が入力されたりすると、プログラムが正常に動作しない等のエラーが起こりうるので、どの型を使っているのか明示されているととても便利です。

そのためPythonでは「タイプヒント」として、各変数で想定している型を明示することができます。例えば以下のような書き方です。

# タイプヒントなし
price = 1000
tax = 1.1
 
# タイプヒントあり
price: int = 1000
tax: float = 1.1

priceはint型を、taxはfloat型をそれぞれ想定した変数だと言えます。これは関数の引数に対しても使用できます。

[main.py]

# タイプヒント無し
def calc_price_including_tax(price, tax):
    return int(price*tax)  
 
# タイプヒントあり
def calc_price_including_tax(price: int, tax: float) -> int:
    return int(price*tax)

「-> int」は、戻り値の型を指しています。ここではreturnで返される「int(price*tax)」はint型を想定してますよ、という意味です。ちなみに戻り値を返さない関数の場合、「-> None」とします。

# 戻り値を返さない館数の場合 (returnではなくprintになってる等)
def calc_price_including_tax(price: int, tax: float) -> None:
    print int(price*tax)


ただ、色々書きましたが、このタイプヒントはあくまでアノテーション(注釈)であるため、指定した型と別の型が入力されてもエラーは起きません。※「price: int」にfloat型を入力する等

型通りの記述になっているか検証したい場合は外部ツールを活用します。ここでは有名な「mypy」というライブラリを使ってみます。

まずはpipインストールします。

pip install mypy

インストールできたら、以下のmain.pyに対して使ってみます。

[main.py]

price: int = 1000
tax: float = 1.1

def calc_price_including_tax(price: int, tax: float) -> int:
    return int(price*tax)


if __name__ == "__main__":
    print(f'税込み価格:{calc_price_including_tax(price, tax)}円')
$ mypy main.py
 
#出力結果
Success: no issues found in 1 source file

エラーが見つからなかったので、全て型通りに記述されているようです!
わざと型を変えてみます。priceの入力値をfloat型にしてみます。

[main.py]

price: int = 1000.1  # 小数点以下を加えてfloat型にする
tax: float = 1.1

def calc_price_including_tax(price: int, tax: float) -> int:
    return int(price*tax)


if __name__ == "__main__":
    print(f'税込み価格:{calc_price_including_tax(price, tax)}円')
$ mypy main.py
 
#出力結果
Found 1 error in 1 file (checked 1 source file)

エラーが見つかりました!
これは便利ですね。


最後に、リストや辞書でのタイプヒントの書き方をメモしておきます。これにはtypingというタイプヒントを提供しているライブラリを活用します。

from typing import List, Dict

sample_list: List[int] = [1, 2, 3, 4]
sample_dict: Dict[str, str] = {'username': 'YM202110'} 


ここまでお読みいただきありがとうございました!!


参考


この記事が気に入ったらサポートをしてみませんか?