Python 3.10では、Optional
やUnion
をわざわざインポートする必要がなくなり、より簡潔に型ヒントを書くことができるようになりました。
例えば、以下のような関数があるとします。
from pathlib import Path
from typing import Optional
def get_latest_log_path(search_dir: Path) -> Optional[Path]:
"""最新のログファイルのパスを取得する
Returns:
Optional[Path]: ログファイルが存在する場合、最新のログファイルのパス。存在しない場合は None
"""
return max(
search_dir.glob("**/*.log"),
key=lambda path: path.stat().st_mtime,
default=None,
)
if __name__ == "__main__":
print(get_latest_log_path(Path("log")))
この関数は、指定したディレクトリ内の最新のログファイルのパスを返すか、ログファイルが存在しない場合はNone
を返します。そのため、戻り値の型はOptional[Path]
となります。
しかし、Python 3.10以降では、以下のように書くことができます。
from pathlib import Path
def get_latest_log_path(search_dir: Path) -> Path | None:
"""最新のログファイルのパスを取得する
Returns:
Path | None: ログファイルが存在する場合、最新のログファイルのパス。存在しない場合は None
"""
return max(
search_dir.glob("**/*.log"),
key=lambda path: path.stat().st_mtime,
default=None,
)
if __name__ == "__main__":
print(get_latest_log_path(Path("log")))
この新しい記法では、Optional[Path]
をPath | None
と書くことができます。これは、Optional[X]
がUnion[X, None]
の略記として利用できることを示しています。
この新しい記法は、コードをより簡潔にし、型ヒントの意図をより明確にすることができます。Python 3.10以降を使用している場合は、ぜひこの新しい記法を試してみてください。