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?
CodePudding user response:
CodePudding user response:
I would personally go with Option 2 moving forward.
Also, just wanted to add this for awareness, but Python 3.7 can made to support this syntax using a __future__ import as shown below. This type checks just the same; I actually got the tip from the latest release notes from Pycharm, which I'm currently using.
from __future__ import annotations
def f(parameter: int | None) -> str | None:
pass
CodePudding user response:
Non-authoritative, but I would expect Optional when
- there is a default value provided (probably
None) Nonewould be unusual for the caller to pass
While I would expect some Union or | to be used when
- there is not a default value and/or the default is not
None Noneis also a valid value
See related suggestions at How do I add default parameters to functions when using type hinting?

