比较这两个函数:
from typing import Optional
def foo1(bar: str = None) -> None:
print(bar)
def foo2(bar: Optional[str] = None) -> None:
print(bar)
Mypy 不会抱怨它们中的任何一个。那么
Optional[]
真的有必要吗?这两个声明之间有什么细微的区别吗?
PEP-484 自原始答案编写以来已更新。 在现代 python 类型检查中,最好使
Optional
显式化。 引用 PEP 的话:
此 PEP 的过去版本允许类型检查器在默认值为 None 时采用可选类型,如以下代码所示:
def handle_employee(e: Employee = None): ...
这将被视为等同于:
def handle_employee(e: Optional[Employee] = None) -> None: ...
这不再是推荐的行为。类型检查器应该朝着要求明确可选类型的方向发展。