mypy,类型提示:Union\[float, int\] -> 是否有数字类型?

新手上路,请多包涵

mypy 真的很方便并且可以捕获很多错误,但是当我编写“科学”应用程序时,我通常会这样做:

 def my_func(number: Union[float, int]):
    # Do something

number 是浮点数还是整数,具体取决于用户的输入。有官方的方法吗?

原文由 JPFrancoia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 574
2 个回答

使用 float ,因为 int 隐含在该类型中:

 def my_func(number: float):

PEP 484 类型提示 特别指出:

这个 PEP 提出了一个几乎同样有效的简单快捷方式,而不是要求用户编写导入编号然后使用 numbers.Float 等, 当一个参数被注释为具有类型 float 时,一个类型的参数 int 是可以接受的;类似地,对于注释为复杂类型的参数,可以接受 float 或 int 类型的参数。

(大胆强调我的)。

理想情况下,您仍会使用 numbers.Real

 from numbers import Real

def my_func(number: Real):

因为那会接受 fractions.Fraction()decimal.Decimal() 对象;数字金字塔不仅仅是整数和浮点值。

但是,当使用 mypy 进行类型检查时,这些目前不起作用,请参阅 Mypy #3186

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以定义自己的类型来解决这个问题并保持代码更简洁。

 FloatInt = Union[float, int]

def my_func(number: FloatInt):
    # Do something

原文由 Curt Welch 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题