JPF*_*oia 28 python type-hinting mypy
mypy非常方便并且捕获了很多错误,但是当我编写"科学"应用程序时,我经常最终会这样做:
def my_func(number: Union[float, int]):
# Do something
Run Code Online (Sandbox Code Playgroud)
number是浮点数还是int,具体取决于用户的输入.有官方的方法吗?
Mar*_*ers 35
float 仅限使用,如int该类型所暗示:
def my_func(number: float):
Run Code Online (Sandbox Code Playgroud)
PEP 484 类型提示明确指出:
而不是要求用户编写导入数字然后使用
numbers.Float等,这个PEP提出了一个简单的快捷方式,几乎同样有效:当一个参数被注释为具有类型时float,类型的参数int是可接受的 ; 类似地,对于注释为具有类型复杂的参数,可以接受float或int类型的参数.
(大胆强调我的).
理想情况下你仍然会使用numbers.Real:
from numbers import Real
def my_func(number: Real):
Run Code Online (Sandbox Code Playgroud)
因为那会接受fractions.Fraction()和decimal.Decimal()反对; 数字金字塔不仅仅是整数和浮点值.
但是,当mypy用于进行类型检查时,这些当前不起作用,请参阅Mypy#3186.
Sup*_*ova 18
Python >3.10允许您执行以下操作。
def my_func(number: int | float) -> int | float:
Run Code Online (Sandbox Code Playgroud)
小智 12
您可以定义自己的类型来解决此问题并保持代码简洁。
FloatInt = Union[float, int]
def my_func(number: FloatInt):
# Do something
Run Code Online (Sandbox Code Playgroud)