一方面,我了解到可以将int
或float
的数字键入为float
(来源:PEP 484 Type Hints和{{3} }):
def add(a: float, b: float):
return a + b
另一方面,int
不是float
的实例:
issubclass(int, float)
返回False
isinstance(42, float)
返回False
因此,我希望Union[int, float]
是此用例的正确注释。
问题:
int
/ float
是否是特殊情况?还有这样的例子吗?Union[float, int]
?答案 0 :(得分:4)
| * int / float是类型注释中的特殊情况吗?
float
是一种特殊情况。 int
不是。 PEP 484在您的问题中的链接所引用的以下段落中说:
当一个参数的注释类型为
float
时,可接受的类型为int
的参数;
因此,接受带有int
注释的float
显然是一种特殊情况,与注释通常处理类层次结构的方式无关。
|还有这样的例子吗?
是的,至少还有另外一种特殊情况。在同一段中,PEP 484继续说:
对于注释为
complex
类型的参数,可接受类型float
或int
的参数。
| *如果这是非预期用途,是否会有任何棉绒警告我Union[float, int]
?
Union[float, int]
很好。
对float
批注的特殊处理只是一种便利(PEP 484称之为“快捷方式”)使人们避免写出冗长的Union[float, int]
批注,因为可以成为float
或int
很常见。