Now that Python 3.10 has been released, is there any preference when indicating that a parameter or returned value might be optional, i.e., can be None. So what is preferred:
Option 1:
def f(parameter: Optional[int]) -> Optional[str]:
Option 2:
def f(parameter: int | None) -> str | None:
Also, is there any preference between Type | None and None | Type?
PEP 604 covers these topics in the specification section.
The existing
typing.Unionand|syntax should be equivalent.int | str == typing.Union[int, str]
The order of the items in the Union should not matter for equality.
(int | str) == (str | int) (int | str | float) == typing.Union[str, float, int]Optional values should be equivalent to the new union syntax
None | t == typing.Optional[t]
As @jonrsharpe comments, Union and Optional are not deprecated, so the Union and | syntax are acceptable.
Łukasz Langa, a Python core developer, replied on a YouTube live related to the Python 3.10 release that Type | None is preferred over Optional[Type] for Python 3.10+.

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With