Python 默认为“无”的参数是否应始终作为可选[]类型提示?
比较这两种功能:Python 默认为“无”的参数是否应始终作为可选[]类型提示?,python,type-hinting,typechecking,mypy,Python,Type Hinting,Typechecking,Mypy,比较这两种功能: from typing import Optional def foo1(bar: str = None) -> None: print(bar) def foo2(bar: Optional[str] = None) -> None: print(bar) Mypy对他们两个都没有抱怨。那么,可选[]真的有必要吗?这两个声明之间有什么细微的区别吗?PEP-484在原始答案编写后已经更新。在现代python类型检查中,最好将设置为可选的显式。引
from typing import Optional
def foo1(bar: str = None) -> None:
print(bar)
def foo2(bar: Optional[str] = None) -> None:
print(bar)
Mypy对他们两个都没有抱怨。那么,
可选[]
真的有必要吗?这两个声明之间有什么细微的区别吗?PEP-484在原始答案编写后已经更新。在现代python类型检查中,最好将设置为可选的
显式。引用政治公众人物的话:
此PEP的旧版本允许类型检查器在默认值为None时采用可选类型,如下代码所示:
def handle\u员工(e:employee=None):…
这将被视为等同于:
def handle\u employee(e:可选[employee]=None)->None:…
这不再是推荐的行为。类型检查器应该转向要求将可选类型显式化
嗯,将默认的None等同于Optional似乎是明智的,但您的第二个链接指出,
--strict Optional
将在“不久的将来”成为默认值。这意味着除非希望稍后检查失败,否则必须使用可选。或者您可以传递否定标志--无严格可选性
--但是,我发现不具有隐式可空性的好处非常显著,因此我建议在适当的情况下使用可选性
,而不是依赖于它是“隐式的”在某些情况下,我完全支持显式解决方案,我只是认为Optional
是一个非常不幸的名称,因为它很长,容易混淆可选类型和可选参数。至少有一些关于更改此()的讨论。无论如何,谢谢你的帮助!这是一个较旧的答案,当时它是一个很好的答案,但PEP现在更新说“此PEP的旧版本允许类型检查器在默认值为None时采用可选类型。类型检查器应该转向要求将可选类型显式化。”