型ヒントしたい(typing
)
1# 変数名: 型ヒント = 値
2year: int = 2023
3pi: float = 3.14
4holiday: tuple[int, int, int, str] = (2023, 5, 5, "こどもの日")
typingで、関数の引数などに型ヒント(=型情報)を追加できます。 Python3.5で追加された標準モジュールです。 型ヒントがあると、VS CodeなどのIDEで編集中に型チェックしてくれるようになります。 入力時に補完候補を表示してくれたり、値がマッチしていない部分をハイライトしてくれたりします。
注釈
最近(2020年)は、TypeScriptやRustに代表される静的型付けな言語がトレンドです。 その波がPythonにもやってきて、関数アノテーションを利用した型ヒントが導入されました。
C/C++初心者のころ、型を宣言するのめんどくさいなと思っていたところでPythonに触れ、 型とか気にしなくても書けるの超便利じゃん!と感動したことがあったので、1周回ってきた感があります。
注釈
デフォルトの型ヒントには強制力はありません。 より厳しく型ヒント/型チェックしたい場合はPydanticなどのパッケージを利用してください。
ビルトインの型を使いたい
1# リスト型
2x: list[int] = [1]
3x: set[int] = {6, 7}
4
5# 辞書型
6x: dict[str, float] = {"field": 2.0}
Python3.9以降であれば、ビルトインされている型で型ヒントできます。
型 |
内容 |
---|---|
|
整数値 |
|
浮動小数点 |
|
真偽値 |
|
文字列 |
|
8ビット文字列 |
|
任意のオブジェクト |
|
(文字列の)リスト |
|
2要素のタプル |
|
任意の要素数のタプル |
|
|
追加の型を使いたい
1from typing import Any, Iterable, Sequence, Mapping
typing
モジュールが提供している型もあります。
型 |
内容 |
---|---|
|
なんでも |
|
整数値の |
|
読み込み専用の |
|
|
mypyのチートシートがとても参考になります。
複数の型ヒントしたい
1# Python3.9まで
2from typing import Union
3x: Union[int, str]
4
5# Python3.10以降
6x: int | str
7x: list[int|str] = [3, 5, "test"]
typing.Union
を使って、複数の型ヒントを組み合わせて指定できます。
Python3.10以降ではOR記号( |
) を使ってより簡単に表現できるようになりました。
None
したい
1# Python3.9まで
2typing import Optional
3x: Optional[str]
4
5# Python3.10以降
6x: str | None
None
を含む場合はtyping.Optional
を使います。
Python3.10以降ではOR記号( |
) を使って直感的に表現できるようになりました。
Duck Typeしたい
1# 関数の list-like な引数
2from typing import Iterable
3def f(ints: Iterable[int]) -> list[str]:
4 return [str(x) for x in ints]
1# 関数の dict-like な引数
2from typing import Mapping
3def f(mapping: Mapping[int, str]) -> list[int]:
4 mapping[5] = "maybe"
5 return list(mapping.keys())
6
7def f(mapping: MutableMapping[int, str]) -> set[str]:
8 mapping[5] = "maybe"
9 return set(mapping.values())