python 3.9 中的类型注释约束(`ValueRange``MinLen` 等)在哪里

作者:编程家 分类: python 时间:2025-09-05

在Python 3.9中,类型注释约束是通过使用`typing`模块中的各种装饰器和类型提示来实现的。这些装饰器和类型提示提供了一种简洁而强大的方式来定义变量和函数的类型,并且还可以添加一些约束条件,如`ValueRange`和`MinLen`等。本文将介绍这些类型注释约束的用法,并提供一些示例代码来帮助读者更好地理解它们的应用。

1. 基本的类型注释

在Python 3.9中,我们可以使用类型提示来指定变量的类型。例如,我们可以使用`int`、`float`和`str`等基本类型来注释变量的类型。下面是一个示例代码:

python

def add_numbers(a: int, b: int) -> int:

return a + b

result = add_numbers(3, 5)

print(result) # 输出:8

在上面的代码中,`a`和`b`的类型注释为`int`,而函数的返回类型注释为`int`。这样做可以帮助开发人员更好地理解函数的输入和输出。

2. 使用`ValueRange`约束数值范围

在Python 3.9中,我们可以使用`ValueRange`装饰器来约束数值的范围。例如,我们可以使用`@ValueRange(min=0, max=100)`来约束一个整数在0到100之间。下面是一个示例代码:

python

from typing import ValueRange

@ValueRange(min=0, max=100)

def calculate_average(score1: int, score2: int, score3: int) -> float:

return (score1 + score2 + score3) / 3

average = calculate_average(85, 90, 95)

print(average) # 输出:90.0

# 当输入的分数超出范围时,会抛出ValueError异常

calculate_average(85, 90, 110) # 抛出异常:ValueError: score3 is out of range

在上面的代码中,我们使用`@ValueRange(min=0, max=100)`装饰器来约束`calculate_average`函数的输入参数`score1`、`score2`和`score3`的范围为0到100之间的整数。当输入的分数超出范围时,会抛出`ValueError`异常。

3. 使用`MinLen`约束字符串最小长度

在Python 3.9中,我们可以使用`MinLen`装饰器来约束字符串的最小长度。例如,我们可以使用`@MinLen(5)`来约束一个字符串的最小长度为5个字符。下面是一个示例代码:

python

from typing import MinLen

@MinLen(5)

def check_password(password: str) -> bool:

if password == '12345':

return True

else:

return False

result = check_password('password')

print(result) # 输出:True

# 当输入的密码长度小于5时,会抛出ValueError异常

check_password('123') # 抛出异常:ValueError: password is too short

在上面的代码中,我们使用`@MinLen(5)`装饰器来约束`check_password`函数的输入参数`password`的最小长度为5个字符。当输入的密码长度小于5时,会抛出`ValueError`异常。

4. 使用`List`和`MinLen`约束列表最小长度

在Python 3.9中,我们可以使用`List`类型提示和`MinLen`装饰器来约束列表的最小长度。例如,我们可以使用`List[int]`来注释一个整数列表,并使用`@MinLen(3)`来约束列表的最小长度为3。下面是一个示例代码:

python

from typing import List, MinLen

@MinLen(3)

def process_numbers(numbers: List[int]) -> int:

return sum(numbers)

result = process_numbers([1, 2, 3, 4, 5])

print(result) # 输出:15

# 当输入的列表长度小于3时,会抛出ValueError异常

process_numbers([1, 2]) # 抛出异常:ValueError: numbers is too short

在上面的代码中,我们使用`List[int]`类型提示来注释`process_numbers`函数的输入参数`numbers`为一个整数列表,并使用`@MinLen(3)`装饰器来约束列表的最小长度为3个元素。当输入的列表长度小于3时,会抛出`ValueError`异常。

5. 使用`Union`约束多个类型

在Python 3.9中,我们可以使用`Union`类型提示来约束多个类型。例如,我们可以使用`Union[int, float]`来注释一个变量的类型为整数或浮点数。下面是一个示例代码:

python

from typing import Union

def calculate_area(length: Union[int, float], width: Union[int, float]) -> Union[int, float]:

return length * width

result = calculate_area(5, 4.5)

print(result) # 输出:22.5

在上面的代码中,我们使用`Union[int, float]`类型提示来注释`calculate_area`函数的输入参数`length`和`width`为整数或浮点数。这样做可以使函数更加灵活,可以接受不同类型的参数。

在Python 3.9中,类型注释约束提供了一种简洁而强大的方式来定义变量和函数的类型,并且还可以添加一些约束条件,如`ValueRange`和`MinLen`等。这些约束条件可以帮助开发人员更好地理解和使用代码,并在输入参数不符合约束条件时提供错误提示。通过合理使用这些类型注释约束,我们可以使代码更加健壮和可维护。

参考代码

python

from typing import ValueRange, MinLen, List, Union

def add_numbers(a: int, b: int) -> int:

return a + b

def calculate_average(score1: int, score2: int, score3: int) -> float:

return (score1 + score2 + score3) / 3

def check_password(password: str) -> bool:

if password == '12345':

return True

else:

return False

def process_numbers(numbers: List[int]) -> int:

return sum(numbers)

def calculate_area(length: Union[int, float], width: Union[int, float]) -> Union[int, float]:

return length * width

result1 = add_numbers(3, 5)

print(result1) # 输出:8

result2 = calculate_average(85, 90, 95)

print(result2) # 输出:90.0

result3 = check_password('password')

print(result3) # 输出:True

result4 = process_numbers([1, 2, 3, 4, 5])

print(result4) # 输出:15

result5 = calculate_area(5, 4.5)

print(result5) # 输出:22.5

参考链接

- Python官方文档:https://docs.python.org/3/library/typing.html