如何在Python中为介于两数间的变量添加类型提示?
在Python中为区间取值变量添加类型提示
方法1:自定义泛型Interval类型
你可以通过typing.Generic创建带上下限参数的泛型类型,完全匹配你想要的Interval[low, hi]标注格式:
from typing import Generic, TypeVar Low = TypeVar('Low', bound=float) Hi = TypeVar('Hi', bound=float) class Interval(Generic[Low, Hi]): pass # 标注取值在0到1之间的概率变量 def calculate_probability() -> Interval[0.0, 1.0]: return 0.7 # 静态类型检查器(如mypy、pyright)会识别该标注 # 变量标注示例 probability: Interval[0.0, 1.0] = 0.5
注意:这种方式仅用于静态类型检查,Python运行时不会自动校验取值是否在区间内。如果需要运行时校验,可以封装带检查逻辑的类:
from typing import Generic, TypeVar, cast Low = TypeVar('Low', bound=float) Hi = TypeVar('Hi', bound=float) class Interval(Generic[Low, Hi]): def __init__(self, value: float, low: Low, hi: Hi): if not (low <= value <= hi): raise ValueError(f"Value {value} must be between {low} and {hi}") self.value = value # 使用示例 probability = Interval(0.7, 0.0, 1.0) def get_prob() -> Interval[0.0, 1.0]: return cast(Interval[0.0, 1.0], Interval(0.6, 0.0, 1.0))
方法2:用NewType做简化标注+运行时校验
如果只针对固定区间(比如0-1),可以用NewType创建专属类型,配合校验函数使用:
from typing import NewType Probability = NewType('Probability', float) def validate_probability(value: float) -> Probability: if not (0.0 <= value <= 1.0): raise ValueError("Probability must be between 0 and 1") return Probability(value) # 使用示例 prob: Probability = validate_probability(0.3) def compute() -> Probability: return validate_probability(0.8)
方法3:利用第三方库做自动校验(如Pydantic)
如果是数据模型或API开发场景,Pydantic的Field可以直接实现区间校验+类型提示:
from pydantic import Field from pydantic.dataclasses import dataclass @dataclass class StatsData: probability: float = Field(ge=0.0, le=1.0) # ge=大于等于,le=小于等于 # 实例化时自动校验 data = StatsData(probability=0.4) data_invalid = StatsData(probability=1.2) # 会抛出ValidationError
内容的提问来源于stack exchange,提问作者Demetri Pananos
相关产品推荐
相关产品推荐

