代码之家  ›  专栏  ›  技术社区  ›  JPFrancoia

mypy,type hint:union[float,int]>有数字类型吗?

  •  17
  • JPFrancoia  · 技术社区  · 8 年前

    MyPy真的很方便,可以捕获很多bug,但是当我编写“科学”应用程序时,我经常会这样做:

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

    number 是float或int,具体取决于用户的输入。有官方的办法吗?

    1 回复  |  直到 8 年前
        1
  •  29
  •   Martijn Pieters    8 年前

    使用 float 只有 作为 int 隐含在该类型中:

    def my_func(number: float):
    

    PEP 484 Type Hints 特别声明:

    而不是要求用户编写导入编号,然后使用 numbers.Float 等等,本政治公众人物提出了一条直接的捷径,几乎同样有效: 当参数被注释为具有 浮动 ,类型的参数 int 是可以接受的 ;类似地,对于注释为具有complex类型的参数,可以接受float或int类型的参数。

    (粗体强调我的意思)。

    理想情况下你仍然会使用 numbers.Real :

    from numbers import Real
    
    def my_func(number: Real):
    

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

    但是,当使用 mypy 要进行类型检查,请参见 Mypy #3186 .

    推荐文章