どうも、nippa です。
最近 python で type annotation を使ってコード作成をしています。
Typescript では literal type をよく使うので、python でも Literal 型を扱うことが できます。
今回は typing の Laiteral についてまとめます。
環境
Typing の Literal 型
一般的な Literal 型の使い方は以下のようになります。
from typing import Literal Fruit = Literal["apple", "banana"] def fruit_choice(fruit: Fruit) -> None: print(f"You chose {fruit}.")
関数の引数に Literal 型で指定した文字列以外を指定すると、mypy でのチェックでエラ ー扱いになります。
実行時には、エラーにならず、そのまま実行されてしまいますので、注意が必要です。
Literal の結合
Literal で定義した、変数に値を追加することはできません。
typing の Uion を利用して、Literal を結合することは可能です。
from typing import Literal, Union Fruit = Literal["apple", "banana"] Meet = Literal["beef", "pork"] Food = Union[Fruit, Meet] def food_choice(food: Food) -> None: print(f"You chose {food}.")
このようにして、Literal 型を結合することができます。
Literal 型の list 型への変換
変数の Validation に Literal 型を使おうとするとそのままでは実行時にエラーになり ます。
get_args
を使って、引数を取得して、list 化する必要があります。
以下のような形であれば、friut か meet を判断することが
from typing import Literal, Union, get_args Fruit = Literal["apple", "banana"] Meet = Literal["beef", "pork"] Food = Union[Fruit, Meet] def food_choice(food: Food) -> None: if food in list(get_args(Fruit)): print("You chose fruit.") elif food in list(get_args(Meet)): print("You chose meet.") else: print("You cannot choose it")
Literal 型で定義した変数はこの形で Validation できます。
感想
今回、簡単な Literal 型の使い方についてまとめました。
python で literal 型を使うと開発やデバッグのコストが低下するので、必要に合わせて 使えるとよいと思っています。
ではでは、また次回。