Python 3.10では、OptionalUnionをわざわざインポートする必要がなくなり、より簡潔に型ヒントを書くことができるようになりました。

例えば、以下のような関数があるとします。

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以降を使用している場合は、ぜひこの新しい記法を試してみてください。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です