从零开始详解Python的变量类型注解
作者:PythonFun
我发现很多初学者在使用变量时很随意,这容易导致各种bug。Python的维护者们早就发现了这个问题,于是在 Python 3.6 版本引入了PEP 526,支持变量类型注解,不过集合类型注解(需要从typing导入)即:from typing import List, Dict, Set。Python 3.9 开始可以使用内置集合类型,无需typing导入,一直发展到现在Pyhon3.14的最新版,也一直支持这项功能。
今天,我来教大家如何在定义变量时就明确类型,让代码更加通俗易懂、规范可靠、维护方便。
一、为什么要在定义时明确类型
先看一个常见问题:
# 不明确的写法 age = "18" # 看起来是数字,其实是字符串 result = age + 5 # 这里会出错!
如果一开始就明确age的类型,就可以有效减少这种错误:
# 明确的写法 age: int = 18 # 明确告诉Python:age是整数 result = age + 5 # 正确:18 + 5 = 23
好处:
- 代码更容易理解
- 避免类型错误
- IDE能给出更好的提示
二、基础变量的类型定义
数字类型
# 整数 student_age: int = 18 student_count: int = 45 # 小数 student_height: float = 175.5 average_score: float = 87.5
文本类型
# 字符串 student_name: str = "小明" school_name: str = "第一中学"
布尔类型
# 布尔值 is_student: bool = True is_graduated: bool = False
三、列表的类型定义
列表是存放多个数据的有序集合,可以重复元素。在定义列表时也可以通过:变量名:list = [元素1,元素2,元素3...] 这样的方式来定义。
数字列表
# 整数列表 score_list: list = [90, 85, 78, 92] age_list: list = [18, 19, 17, 18] # 小数列表 temperature_list: list = [36.5, 37.0, 36.8] price_list: list = [12.5, 8.9, 15.0]
字符串列表
# 字符串列表 student_list: list = ["小明", "小红", "小刚"] subject_list: list = ["数学", "语文", "英语"]
四、元组的类型定义
元组是不可变的有序序列,一旦创建就不能修改。以下是常用于固定数据组合和配置信息的两个实例。
固定数据组合
# 学生基本信息(姓名,年龄,身高)
student_info: tuple = ("小明", 18, 175.5)
coordinates: tuple = (39.9, 116.4) # 经纬度
# 颜色RGB值
color_red: tuple = (255, 0, 0)
color_white: tuple = (255, 255, 255)配置信息
# 数据库配置(主机,端口,用户名,密码)
db_config: tuple = ("localhost", 3306, "admin", "password")
app_settings: tuple = ("MyApp", "1.0.0", True)五、集合的类型定义
集合是无序的不重复元素序列,适合去重和集合运算。我们通过集合变量名:set = {元素1,元素2...}来实现。
去重数据
# 学生ID集合(自动去重)
student_ids: set = {1001, 1002, 1003, 1001, 1004}
unique_tags: set = {"python", "programming", "tutorial", "python"}
# 课程标签
course_tags: set = {"基础", "进阶", "实战", "项目"}权限集合
# 用户权限
user_permissions: set = {"read", "write", "execute"}
admin_roles: set = {"super_admin", "content_admin", "user_admin"}六、字典的类型定义
字典用来存储"键值对",就像现实中的字典一样。可以通过字典变量名:dict = {键名:键值}这种形式来定义。
学生信息字典
# 定义学生信息
student: dict = {
"name": "小明",
"age": 18,
"score": 95,
"is_monitor": True
}
class_info: dict = {
"class_name": "三年级二班",
"student_count": 45,
"teacher": "张老师"
}成绩字典
# 各科成绩
score_dict: dict = {
"math": 95,
"chinese": 88,
"english": 92,
"physics": 85
}七、各种数据结构的对比
| 类型 | 特点 | 使用场景 | 格式 |
|---|---|---|---|
| 字符(str) | 有序、可重复、不可修改 | 学生姓名 | 变量名: str = 值 |
| 列表(list) | 有序、可重复、可修改 | 学生名单、成绩列表 | 变量名: list = 值 |
| 元组(tuple) | 有序、可重复、不可修改 | 坐标、配置信息 | 变量名: tuple = 值 |
| 集合(set) | 无序、不重复 | 标签、权限、去重数据 | 变量名: set = 值 |
| 字典(dict) | 键值对、无序 | 学生信息、配置参数 | 变量名: dict = 值 |
八、实际应用案例
让我们用一个完整的例子来看看类型定义的实际价值,定义时虽然有点儿麻烦,但是后期引用时就非常的方便,而且能够更好地与其它编程语言兼容:
# 基础信息
class_name: str = "三年级二班"
student_count: int = 30
average_score: float = 87.5
is_excellent_class: bool = True
# 列表 - 有序可重复数据
student_list: list = ["小明", "小红", "小刚", "小丽"]
score_list: list = [95, 92, 88, 90, 85]
# 元组 - 不可变配置数据
class_config: tuple = (2024, "A班", "张老师")
color_scheme: tuple = (255, 255, 255) # 白色
# 集合 - 不重复数据
subject_set: set = {"数学", "语文", "英语", "物理", "数学"} # 自动去重
permission_set: set = {"read", "write"}
# 字典 - 键值对数据
student_dict: dict = {
"小明": {"age": 18, "score": 95},
"小红": {"age": 17, "score": 92}
}
subject_average: dict = {
"math": 89.5,
"chinese": 87.0,
"english": 91.2
}
# 使用这些变量
print(f"班级:{class_name}")
print(f"学生名单:{student_list}")
print(f"唯一科目:{subject_set}")
print(f"班级配置:{class_config}")
# 集合的去重特性演示
duplicate_numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers: set = set(duplicate_numbers)
print(f"去重前:{duplicate_numbers}")
print(f"去重后:{unique_numbers}")九、类型定义的好处
1. 代码更清晰,便于识别类型
# 没有类型定义 - 需要猜
data1 = ["小明", 18, 95]
data2 = (39.9, 116.4)
data3 = {1, 2, 3}
# 有类型定义 - 一目了然
student_data: list = ["小明", 18, 95]
coordinates: tuple = (39.9, 116.4)
number_set: set = {1, 2, 3}2. 避免错误,减少变量类型错误
# 元组不可修改的特性
colors: tuple = ("red", "green", "blue")
# colors[0] = "yellow" # 这会报错!
# 正确做法是创建新的元组
new_colors: tuple = ("yellow", "green", "blue")3. 利用集合特性
# 自动去重
tags: set = {"python", "编程", "教程", "python", "编程"}
print(tags) # 输出:{'python', '编程', '教程'} 自动去重十、练习时间
学习了如何规范地自定义变量,下面我们根据下面几道题来巩固一下已经学习的知识吧。
请试着定义以下变量(记得加上类型):
- 你的个人信息(使用字典)
- 你的爱好列表(使用列表)
- 你的技能集合(使用集合,自动去重)
- 你的出生日期(使用元组)
示例答案:
# 个人信息字典
personal_info: dict = {
"name": "张三",
"age": 20,
"city": "北京"
}
# 爱好列表
hobbies: list = ["读书", "编程", "运动", "音乐"]
# 技能集合(自动去重)
skills: set = {"Python", "Java", "SQL", "Python"} # 结果:{'Python', 'Java', 'SQL'}
# 出生日期元组(年,月,日)
birth_date: tuple = (2000, 5, 15)总结
1.类型注解是可选但推荐的,它可以提高代码质量, 请记住这几个要点:
- 基础类型:int, float, str, bool
- 列表(list):有序可重复,用方括号 []
- 元组(tuple):有序不可变,用圆括号 ()
- 集合(set):无序不重复,用花括号 {}
- 字典(dict):键值对,用花括号 {key: value}
2. 类型注解方法是:变量名: 类型 = 值, 记住这个模板,不同类型的数据可以依次类推。
3. 从简单开始 - 先掌握基础类型,再学习集合类型数据。
4. 注意版本兼容性 - 根据Python版本选择合适的写法,Python3.9以上版本建议使用。
5. 保持一致性 - 在整个项目中保持统一的注解风格,便于识别bug和程序维护。
到此这篇关于从零开始详解Python的变量类型注解的文章就介绍到这了,更多相关Python变量类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
