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时采用可选类型。类型检查器应该转向要求将可选类型显式化。”