【Python】Type HintsとArrows

Python

プログラミングをする際に、データ型というものがあります。具体的には

  • int
  • str
  • float
  • bool

等等があるでしょう。Pythonはデータ型はとても柔軟でいて、型の宣言をせずに変数に値を格納することができます。またキャストによってデータ型を変更することもできます。これはDynamic Typing(動的型付け)と呼ばれています。

初心者にとって型を指定せず自由に変数を設定できるのはとても感覚的でわかりやすい一方、型が分からずにエラーが起きてしまうという面もあります。

Type Hintsはpython3.5以降で実装されているようです。

Type Hints

そこで、例えば、年齢を格納する変数ageを設定します。その際にデータ型を指定することもできます。

age: int

この指定の後、実際にageにint型となる12、及びstr型となる”twelve”を格納してみます。ここでは使用IDEはPyCharmです。

そうすると、”twelve”を格納しようとした際に、想定されている方が違いますよ。と忠告してくれていることが分かります。

関数の引数に対しても同様にできます。

def can_drink_alcohol(age):
    if age >= 20:
        return True
    else:
        return False

# エラーなし
if can_drink_alcohol(22):
    print("You can enjoy alcohol!")
else:
    print("prohibited by law!")

# エラーあり
if can_drink_alcohol("eighteen"):
    print("You can enjoy alcohol!")
else:
    print("prohibited by law!")

このような関数があった場合、もちろんエラーありの使い方ではいけないのですが、実際に関数を使用する場所がコード内で100行以上離れていたとします。Type Hintsを使用して、関数への引数の型が間違えていたら先ほど同様その場で教えてくれるようにします。

def can_drink_alcohol(age: int):
    if age >= 20:
        return True
    else:
        return False

こんな感じでこの関数にはint型を入れてほしいです。と教えてくれます。これによってコードを実行する前にエラーが生じることを防ぎます。

Arrows ->

引数だけでなく関数の出力のデータ型を指定することもできます。

def can_drink_alcohol(age: int) -> bool:
    if age >= 20:
        return True
    else:
        return False

コードのようにハイフンと角括弧で小さな矢印を作成し、型を指定します。この関数はbool型を返すことが期待されています。そして関数内の返り値をstr型に変更してみると

同様にreturnで返すものがbool型を期待されています。と教えてくれます。

これらを使用することで、コードをより安全に保つことができます。

関数がコード内で離れていると引数が分からないと言いましたが、実際にはIDEにはコード内の関数にジャンプする機能がついていることも多いので合わせて使用すると、より効率的にバグを防ぐコードが書けるのではないでしょうか。

コメント

タイトルとURLをコピーしました