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