python快速入门学习笔记(进阶篇)二十一:类型注解

  • 原创
  • 作者:程序员三丰
  • 发布时间:2026-04-14 10:54
  • 浏览量:3
python入门第二十一课,主要是学习了类型注解,类型注解为变量和函数参数标预期类型,提升代码可读性,便于IDE检查与静态分析。


类型注解不会影响程序运行,它只是给人和工具看的,它可以提高代码的可读性、让IDE智能提示更强。

在 Python 中,主要有两种类型的注解,分别是:

❏ 变量类型注解

❏ 函数类型注解

变量类型注解

变量类型注解,就是给变量加上类型说明,可增强代码的可读性、让IDE的提示更友好。

同时,当一个代码文档比较长的时候,或者团队协作,类型注解在语法上是对类型的一种软约束,在IDE中鼠标放在变量上就会有类型提示,如果与类型注解不一致,则会显示波浪线警告。

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

num: int = 100
price: float = 99.8
message: str = '你好'
is_vip: bool = False
result: None = None # 语法上没有问题,但这么写没有意义

print(type(num), num) # <class 'int'> 100
print(type(price), price) # <class 'float'> 99.8
print(type(message), message) # <class 'str'> 你好
print(type(is_vip), is_vip) # <class 'bool'> False
print(type(result), result) # <class 'NoneType'> None

# 下面的写法违背了变量类型注解,在IDE中出现波浪线警告提示信息,但是运行代码后还是会赋值成功,所以称之为“软约束”
num = '999' # 在 PyCharm IDE 内值'999'下面会出现黄色波浪线,鼠标悬浮提示“应为类型 'int',但实际为 'str' ”
print(type(num), num) # <class 'str'> 999

2️⃣ 注意:可以先写变量的类型注解,以后再赋值。语法如下:

school: str
# print('*********', school) # 运行报错:NameError: name 'school' is not defined
school = '清华大学'
print('我的理想大学是:', school) # 我的理想大学是: 清华大学

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

3️⃣ 容器类型的注解:

列表类型注解示例代码:

# 列表中的所有元素必须是 str 类型
skills: list[str] = ['PHP', 'VUE', 'TypeScript']

# 列表中的元素,可以是:str 或 int 类型
price: list[str | int] = [100, 99, '88']
# 上面这行代码的旧写法如下:
# from typing import Union
# price: list[Union[int, str]] = [100, 99, '88']

price.append('77')
price.append(88.36)
print(type(price), price)

集合类型注解示例代码:

# 集合中所有元素必须是 str 类型
# cities: set[str] = {'北京', '上海', '深圳'}

# 集合中的元素,可以是:str 或 float 或 bool
cities: set[str | float | bool] = {'北京', '上海', '深圳'}

cities.add('广州')
cities.add(11.11)
cities.add(True)
cities.add(None)
print(type(cities), cities)

字典类型注解示例代码:

# 字典的键是 str 类型,值是 int 类型
# persons: dict[str, int] = {'张三': 100, '李四': 98, '王五': 89}

# 字典的键是 str 或 int, 值是 int 类型
persons: dict[str | int, int] = {'张三': 100, '李四': 98, '王五': 89}

persons['赵六'] = 94
persons[1] = 88
print(type(persons), persons)

元组的类型注解有些特殊,请看示例代码:

# 元组中仅包含 1 个 int 类型的元素
scores: tuple[int] = (60,)

# 元组中包含 3 个 int 类型的元素
scores2: tuple[int, int, int] = (60, 70, 80)

# 元组中包含任意数量元素,每个元素的类型必须是 int
scores3: tuple[int, ...] = (60, 70, 80, 90)

# 元组中包含任意数量元素,每个元素的类型可以是:str 或 int
scores4: tuple[int | str, ...] = (60, 70, 80, 90, '3.14')

4️⃣ 类型推导注意事项

Python 中存在类型推导,根据变量初始赋值的实际数据,自动推断变量的类型。

  • 对于非容器类型:后续如果改变类型,不会警告。
  • 对于容器类型:要求内部的元素类型必须和推导出来的一致,否则就会警告。
x = 100
x = 'hello'

y = [1, 2, 3]
y.append('4') # 此行会有类型警告信息:应为类型 'int' (匹配的泛型类型 '_T'),但实际为 'str'

函数类型注解

函数类型注解就是给函数的『参数』和『返回值』添加类型说明。

语法格式函数名(参数1: 类型, 参数2: 类型) -> 返回值类型

1️⃣ 给参数和返回值添加类型注解

def add(x: int, y: int) -> int:
    return x + y

print(add(1, 2)) # 正常执行,返回:3
print(add('1', '2')) # 可以正常执行,返回:12,但是实参'1'和'2'在IDE中有警告信息:应为类型 'int',但实际为 'str'

2️⃣ 带默认值的参数,可以不写注解

def add2(x = 1, y = 2):
    return x + y

print(add2(1, 2)) # 正常执行,返回:3
print(add2('1', '2')) # 可以正常执行,返回:12,但是实参'1'和'2'在IDE中有警告信息:应为类型 'int',但实际为 'str'

3️⃣ 设置多个返回值的类型注解

def show_num_info(nums: list[int]) -> tuple[int, int, float]:
    max_v = max(nums)
    min_v = min(nums)
    return max_v, min_v, max_v / min_v

print(show_num_info([1, 2, 3])) # (3, 1, 3.0)

总结

个人理解,在Python中类型注解只是一种软约束,一种约定,需要程序员主动去遵循类型注解,如果执意违背类型注解,可能会得到异常结果。

声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://www.51blog.xyz/article/123.html

文章归档

推荐文章

buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas vue3 three.js 微信支付 PHP全栈开发 Python AI 人工智能 AI生成 工作经验 实战笔记