Python的
None
对象,类型提示使用None
代替其实际类型NoneType
。根据文档:
请注意,None作为类型提示是一个特殊情况,会被替换为type(None)。
我认为这很令人困惑,没有进一步的解释。
有人知道背后的原因吗?
None
对象,类型提示使用None
代替其实际类型NoneType
。根据文档:
请注意,None作为类型提示是一个特殊情况,会被替换为type(None)。
我认为这很令人困惑,没有进一步的解释。
有人知道背后的原因吗?
这只是一种设计选择,没有特别的原因。
写成 def fn(x: None) -> None
比 def fn(x: NoneType) -> NoneType
更加简洁(而且在我看来也更清晰)。
这也与其他类型提示保持一致:List
、Dict
等都是一个单词(与相关的内置函数相同),并带有首字母大写的单词。
None
是唯一一个已经具有大写字母的对象。 - Marco BonelliUnion[Literal["r"], Literal["w"]]
是一个类型,表示相应的值只能是字符串"r"或"w" -- 这个类型之所以没有拼写成Union["r", "w"]
是因为只要前向引用存在,这将太模糊了。但是这种不确定性不存在于None中,因此直接引用该值是可以的。由于type(None)
只有一种值(例如,它是一种"singleton"类型),因此将type(None)
和None
视为可互换的也是可以的。 - Michael0x2aNone
看起来不那么特殊:例如,您可以将其视为仅仅是一个值,而不是同时是值和类型--在一些受限制的情况下混合值和类型是可以的。 - Michael0x2a