Python 3.10では、型ヒントにおけるUnionの使用が大幅に簡略化されました。これは、PEP 604による新機能で、X | Y
の形式でUnion型を書くことが可能になりました。
Unionの古い方法
Python 3.10以前では、変数やパラメータが複数の異なる型を取り得ることを示すためには、Unionを使用する必要がありました。以下にその例を示します。
from typing import Union
rate: Union[int, str] = 1
def square(number: Union[int, float]) -> Union[int, float]:
return number ** 2
Python 3.10の新しいUnion
Python 3.10では、Unionをインポートする必要はなくなりました。詳細はPEP 604に記載されています。このPEPでは、|
演算子を使用してUnionを完全に置き換えることができます。それを行うと、上記のコードは次のようになります。
def square(number: int | float) -> int | float:
return number ** 2
また、引数がNoneである可能性があることを示すために使用されていたOptionalも、新しい構文で置き換えることができます。
# Old syntax
from typing import Optional, Union
def f(param: Optional[int]) -> Union[float, str]:
...
# New syntax in 3.10
def f(param: int | None) -> float | str:
...
この新しい構文は、isinstance()
やissubclass()
といった関数でも使用することができます。
>>> isinstance(1, int | str)
True
まとめ
Python言語にとって、|
演算子を型ヒントで使用できるようになったことは、驚くべき新機能ではありませんが、コードがよりクリーンに見えるようになりました。インポートが少なくなり、この方法で見た目がよくなりました。