摘要:提到Python中的元组(tuple),很多人第一反应是:“哦,就是那个不能改的列表嘛!”
提到Python中的元组(tuple),很多人第一反应是:“哦,就是那个不能改的列表嘛!”
但如果你只把它当“只读列表”用,可就大材小用了!
今天,我们就来扒一扒元组的隐藏技能和超实用场景,看完你一定会惊呼:原来元组还能这么玩!
元组的不可变性是它的核心标签,但这背后藏着更多秘密:
内存更省:Python会为元组分配连续内存,且不可变性让它能被缓存复用,内存效率远超列表。速度更快:元组的元素访问速度比列表快约5%~20%,尤其是在数据量大的场景下。可哈希(Hashable):所有元素不可变的元组,能直接当字典的键!列表却不行。反直觉操作:
元组不可变,但如果它的元素是可变对象(比如列表),你依然可以修改这个元素!
单元素元组的“坑”
想创建一个只有1个元素的元组?必须加逗号!否则Python会误判类型。
t = (1) # ❌ 这是整数,不是元组! t = (1,) # ✅ 这才是元组解包与打包
元组支持“一行代码拆解数据”,还能用*号玩转灵活解包:
# 解包赋值 x, y, z = (10, 20, 30) # 扩展解包(Python 3.5+) first, *rest = (1, 2, 3, 4) # rest = [2, 3, 4] # 函数返回多个值 def get_user_info: return "张三", 28, "python@example.com" name, age, email = get_user_info命名元组:代码可读性飙升
用collections.namedtuple创建带字段名的元组,告别无意义的索引!
from collections import namedtuple # 定义一个“点”结构 Point = namedtuple("Point", ["x", "y"]) p = Point(10, y=20) print(p.x, p.y) # 输出:10 20✅ 当字典的键
用元组存储多维坐标、复合键值,轻松实现高效查询:
locations = { (35.6, 139.7): "东京", (40.7, -74.0): "纽约" } print(locations[(35.6, 139.7)]) # 输出:东京✅ 函数参数传递
用*args接收可变参数时,参数会被打包成元组:
def calculate_sum(*numbers): return sum(numbers) calculate_sum(1, 2, 3) # numbers = (1, 2, 3)✅ 数据保护与常量
配置文件、数据库查询结果等需要“防手滑修改”的数据,用元组更安全!
场景选元组选列表元组绝不是“鸡肋”的只读列表!它在内存优化、数据安全、高阶解包、函数式编程中都有独特优势。
下回写代码时,不妨多问自己:这里用元组是否更合适?
来源:信息科技云课堂