国庆节10月1日
--


Python类型注解的基本介绍、变量类型注解、类型推断、函数类型注解

类型注解是Python中的一种语法特性,用于明确标识变量、函数参数和返回值的数据类型,从而使代码更清晰、更安全、更易维护。
1变量名: 数据类型 = 值1# 无类型注解2a = 6953score = 98.54hobby = "Python"5flag = True6pic = None7names = ["A", "C", "E"]8phones = {"13309091111", "15209109121"}9options = {"count": 0, "total": 0}10goods = ("手机", 5999, 1)11
12# 有类型注解13a: int = 69514score: float = 98.515hobby: str = "Python"16flag: bool = True17pic: None = None18names: list[str] = ["A", "C", "E"]19phones: set[str] = {"13309091111", "15209109121"}20options: dict[str, int] = {"count": 0, "total": 0}21goods: tuple[str, int, int] = ("手机", 5999, 1)类型推断是指Python解释器自动推断出变量、表达式或函数返回值的数据类型的能力,而无需开发者显式声明。
1# Python会自动推断类型2a = 695 # 推断为 int3score = 98.5 # 推断为 float4hobby = "football" # 推断为 str5flag = True # 推断为 bool6pic = None # 推断为 NoneType7names = ["张三", "李四", "王五"] # 推断为 list[str]8goods = ("鼠标", "键盘", "USB") # 推断为 tuple[str, str, str]类型注解的写法?
变量: 数据类型(如 a: int)常见类型的写法
int、float、bool、str、None、list、set、tuple、dictstr | int(使用 | 表示或)为什么要使用类型注解,有什么好处呢?
如果对变量直接赋值、变量运算等场景,Python会自动进行类型推断
Python是动态类型语言,添加的类型注解只是提示,并不是强制约束!!!
为函数添加类型注解,其实主要就是为函数的参数和返回值添加类型注解。
1def 函数名(参数名: 参数类型, ...) -> 返回值类型:2 函数体3 return 返回值1def calc(scores: list[int]) -> float:2 return sum(scores) / len(scores)3
4# 调用5result = calc([85, 90, 95, 100])6print(result) # 92.51def calc_data(scores: list[int]) -> tuple[int, int, float]:2 max_v = max(scores)3 min_v = min(scores)4 avg_v = sum(scores) / len(scores)5 return max_v, min_v, avg_v6
7# 调用8max_score, min_score, avg_score = calc_data([85, 90, 95, 100])9print(max_score, min_score, avg_score) # 100 85 92.5: 类型-> 类型函数中类型注解的语法?
1def calc_data(scores: list[int]) -> tuple[int, int, float]:2 ...推荐使用场景
| 分隔,如 str | int变量名 : 数据类型 = 值,如 a: int = 695int、小数 float、布尔 bool、字符串 str、空值 Nonelist[str]、字符串集合 set[str]、键是字符串值是整数的字典 dict[str, int]、三个元素依次为字符串、整数、整数的元组 tuple[str, int, int]|(竖线)分隔,如 str | int-> 符号之后def calc(scores: list[int]) -> float::参数是整数列表、返回值是小数;如果函数返回多个值,返回值类型写成元组(tuple) 2-1 给变量加类型注解
给 6 个变量分别加上类型注解并各打印一次:整数 695、小数 98.5、字符串 "Python"、布尔 True、字符串列表 ["A", "C", "E"]、键和值都是整数的字典 {"count": 0, "total": 0}。
批改(2026-09-28):⚠️ 6 个变量都注解了、输出也全对;但两个容器的元素类型没写——你写的是
list_var: list/dict_var: dict,按提示里的写法应该是list_var: list[str]/dict_var: dict[str, int](写清”里面装什么”才是这套注解的意义)。
一级 · 思路:注解写在变量名和等号中间,冒号后面写类型;容器类型还要写清里面装的是什么类型
二级 · 方法:变量名: 类型 = 值;容器写成 类型[元素类型]
三级 · 骨架:a: ____ = 695 / names: ____[str] = ["A", "C", "E"] / options: ____[str, ____] = {"count": 0}
1# 2-12a: int = 6953score: float = 98.54hobby: str = "Python"5flag: bool = True6names: list[str] = ["A", "C", "E"]7options: dict[str, int] = {"count": 0, "total": 0}8
9print(a, score, hobby, flag, names, options) 2-2 给函数加类型注解(单返回值)
写函数 average(scores):传入整数列表,返回平均分(小数)。给参数和返回值都加上类型注解,再用 [85, 90, 95, 100] 调用并打印结果(应得 92.5)。
批改(2026-09-28):✅ 正确。
def average(scores: list[int]) -> float注解到位,实测输出92.5。
一级 · 思路:参数注解写在参数名后面,返回值注解写在函数名那一行的右箭头后面
二级 · 方法:def 函数名(参数: 类型) -> 返回类型:
三级 · 骨架:def average(scores: ____[int]) -> ____:
1# 2-22def average(scores: list[int]) -> float:3 return sum(scores) / len(scores)4
5print(average([85, 90, 95, 100])) # 92.5 2-3 给多返回值函数加类型注解
写函数 min_max_avg(scores):一次返回最大值、最小值、平均值。返回值类型要写成”三个元素依次为整数、整数、小数的元组”,调用后把三个结果分别打印出来(应得 100 85 92.5)。
批改(2026-09-28):⚠️ 两处可改进:① 返回注解写成
tuple[int, int, float | int],平均值一定是小数(sum/len结果必为 float),按提示写tuple[int, int, float]就够,多写| int反而把类型放宽了;② 最后只print(min_max_avg(scores))打整个元组,题面要求”把三个结果分别打印”(如max_v, min_v, avg_v = min_max_avg(scores)后再各打一行)。
一级 · 思路:返回多个值时其实返回的是一个元组,元组注解要按顺序写清每个元素的类型
二级 · 方法:-> tuple[int, int, float]
三级 · 骨架:def min_max_avg(scores: list[int]) -> ____[int, int, ____]:
1# 2-32def min_max_avg(scores: list[int]) -> tuple[int, int, float]:3 return max(scores), min(scores), sum(scores) / len(scores)4
5max_score, min_score, avg_score = min_max_avg([85, 90, 95, 100])6print(max_score, min_score, avg_score) # 100 85 92.53-1 成绩统计小程序(注解版) 把这一篇的知识串起来用一遍:
average(scores):参数标注整数列表、返回值标注小数,返回平均分report(scores):一次返回最高分、最低分、平均分,返回值标注”三个元素的元组”批改(2026-09-28):⚠️ ① 第 1~3 步你用一个
Summary类把”变量 + 两个函数”装在了一起——知识点覆盖到了(__init__里的参数都带注解、两个方法注解也对),但题面要的是”定义 4 个变量 + 两个独立函数”,这种写法等于顺手练了面向对象,可以接受;② 第 4 步打印全对(平均分84.33保留两位小数 ✅);③ 第 5 步没做:注释里写了”注解只是提示,不是强制约束”,但没有真的把["a", "b"]传进average()跑一次看报错——那一步才是这题的重点(报错来自sum()//运算,而不是注解本身)。
一级 · 思路:先定义数据(带注解)→ 写两个带注解的函数 → 打印结果 → 故意传错类型做对照
二级 · 方法:list[str] / dict[str, str] / tuple[int, int, float];打印保留两位小数用 f"{值:.2f}"
三级 · 骨架:def report(scores: list[int]) -> ____[int, int, ____]: / print(f"平均分:{average(avg_scores):____}")
1class_name: str = "Python 提高班"2students: list[str] = ["小王", "小李", "小张"]3avg_scores: list[int] = [85, 90, 95, 100]4levels: dict[str, str] = {"优秀": "90 分以上", "良好": "80 分以上"}5
6def average(scores: list[int]) -> float:7 return sum(scores) / len(scores)8
9def report(scores: list[int]) -> tuple[int, int, float]:10 return max(scores), min(scores), sum(scores) / len(scores)11
12print(f"班级:{class_name},共 {len(students)} 人:{'、'.join(students)}")13print(f"平均分:{average(avg_scores):.2f}") # 92.5014
15max_score, min_score, avg_score = report(avg_scores)16print(f"最高分 {max_score} / 最低分 {min_score} / 平均分 {avg_score}")17print("等级对照:", levels)18
19# 故意把字符串列表传进去:注解只是提示,不会拦住它,报错来自 sum 运算本身20# 取消下面一行的注释运行,会看到 TypeError: unsupported operand type(s) for +: 'int' and 'str'21# print(average(["a", "b"]))如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"生活不是等待暴风雨过去,而是学会在雨中跳舞。"—— 塞维涅夫人


