当前位置:首页>python>Python之类型注解与函数类型注解

Python之类型注解与函数类型注解

  • 2026-08-23 06:08:52
Python之类型注解与函数类型注解

第六章 类型注解与函数类型注解

类型注解不会影响程序运行,它只是给人和工具看的,它可以提高代码的可读性,让IDE开发工具智能提示更强,当然,加上类型后,可以更好的限定变量范围。编程语言中有很多类似的方式,例如前端Vue开发中使用TypeScript中的语法限定变量范围,Java中使用泛型来限定范围。

1. 变量类型注解

语法格式:变量名: 类型 = 值

  • 变量类型注解
# 变量类型注解:给变量加上类型说明,可增强代码的可读性、让 IDE 的提示更友好。
num: int = 100
price: float = 12.99
message: str = 'Hello Python'
is_vip: bool = True
result: None = None# 语法上不会报错,但这么写意义不大

# 注意:可以先写变量的类型注解,以后再赋值
# school: str并不是在定义变量,只是说明,如果未来有school变量,那应该是str类型。
school: str
# print('@@@@@@', school) # 直接打印未定义的变量会报错
school = 'Hello Python'
print('@@@@@@', school)

注意:可以先写变量的类型注解,以后再赋值。

备注:上述代码中,school: str并不是在定义变量,只是说明:如果未来有school变量,那应该是str类型。Python执行到school = 'Hello Python'这句代码时,才会真正的定义school变量。

  • 容器类型注解
# hobby是列表,并且列表中的所有元素必须是str类型。
hobby: list[str] = ['蓝球', '足球', '乒乓球']
# hobby是列表,并且列表中的的元素可以是:str或者int类型
hobby: list[str | int] = ['游泳', '登山', '探险']
# 上面这行代码的旧写法如下:
from typing import Union
hobby: list[Union[str, int]] = ['游泳', '登山', '探险']

# citys是集合,并且集合中所有的元素必须是str类型
citys: set[str] = {'北京', '上海', '广州'}
# citys是集合,并且集合中所有元素是:str或者float或者bool类型
citys: set[str | float | bool] = ['北京', '上海', '广州']

# persons是字典,键(key)是str类型,值(value)是int类型
persons: dict[str, int] = {'唐僧':99, '孙悟空':9999, '猪八戒': 999}
# persons是字典,键(key)是str或者int类型,值(value)是int类型
persons: dict[str | int, int] = {'唐僧':99, '孙悟空':9999, '猪八戒': 999}
  • 元组类型注解
# 元组的类型声明有点特殊,各位要留意一下:
# scores是元组,并且元组中仅包含1个int类型的元素。
scores: tuple[int] = (60,)
# scores是元组,并且元组中包含3个int类型的元素。
socres: tuple[int, int, int] = (10, 20, 30)
# socres是元组,并且元组中包含任意个数的元素,但每个元素的类型必须是int类型。
scores: tuple[int, ...] = [10, 20, 30, 40 ,50]
# scores是元组,并且元组中包含任意个数的元素,每个元素的类型可以是:int或者str
scores: tuple[int | str, ...] = (10, '张三', 20, '李四', 30)
# Python会根据初始化赋值推导变量的类型:
# 1.对于普通变量:后续如果改变类型,不会警告。
# 2.对于容器变量:要求内部元素类型必须与推导出来的一致,否则就会警告。
a = 100
a = 'Hello Python'

b = [10, 20, 30]
b.append('40') # 警告:应为类型int,但实际为str

2. 函数类型注解

  1. 函数类型注解:给函数的参数和返回值添加类型说明。
  2. 语法格式:函数名(参数1: 类型, 参数2: 类型) -> 返回值类型。
  • 给参数和返回值加类型注解
# 示例1:设置参数类型注解,设置返回值类型注解。
def add(x: int, y: int) -> int:
    return x + y
  • 带默认值的参数,可以不写注解
# 示例2:参数有默认值(Python可以推导出参数的类型),设置返回值类型
def add(x = 1, y = 2) -> int:
    return x + y
  • 设置多个返回值的类型注解
# 示例3:设置多个返回值的类型注解
def show_numbers_info(nums: list[int]) -> tuple[int, int, float]:
    max_value = max(nums)
    min_value = min(nums)
    result = max_value / min_value
    return max_value, min_value, result
  • 可变参数类型注解
# 示例4:设置*args的类型注解,要求args中的每个参数都必须是int类型
def add(*args: int) -> int:
    return sum(args)

# 示例5:设置**kwargs的类型注解,要求kwargs中的每组参数的值,必须是str或者int类型
def show_info(**kwargs: str | int):
    print(kwargs)
  • 获取函数的注解信息
# 获取函数的注解信息
def add(*args: int) -> int:
    return sum(args)
print(add.__annotations__) # {'args': <class 'int'>, 'return': <class 'int'>}

最新文章

随机文章