web-dev-qa-db-ja.com

mypy、タイプのヒント:Union [float、int]-> Numberタイプはありますか?

mypyは非常に便利で、多くのバグをキャッチしますが、「科学的な」アプリケーションを作成するとき、しばしば次のようになります。

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

numberは、ユーザーの入力に応じて、floatまたはintです。それを行う公式の方法はありますか?

23
JPFrancoia

floatonlyを使用します。そのタイプにはintが含まれているためです。

_def my_func(number: float):
_

PEP 484 Type Hints は具体的に次のように述べています:

ユーザーがインポート番号を書き込んでから_numbers.Float_などを使用することを要求するのではなく、このPEPはほぼ同じくらい効果的な簡単なショートカットを提案します:引数がfloat型、タイプintが受け入れ可能です;同様に、complex型を持つと注釈された引数については、float型またはint型の引数を使用できます。

(太字強調鉱山)。

理想的には、まだ _numbers.Real_ を使用します:

_from numbers import Real

def my_func(number: Real):
_

fractions.Fraction()およびdecimal.Decimal()オブジェクトも同様に受け入れます。数値ピラミッドは、整数や浮動小数点値よりも広いです。

ただし、mypyを使用して型チェックを行う場合、現在これらは機能していません。 Mypy#3186 を参照してください。

28
Martijn Pieters