当前位置: 首页 > news >正文

玩转python:通俗易懂掌握高级数据结构:collections模块之namedtuple

引言

namedtuple是Python中collections模块提供的一个强大工具,用于创建具有字段名的元组。它不仅具备元组的不可变性,还能通过字段名访问元素,极大地提高了代码的可读性和可维护性。本文将详细介绍namedtuple的关键用法和特性,并通过8个丰富的案例帮助读者掌握其应用。


具名元组关键用法和特性
特性/方法描述
不可变性一旦创建,namedtuple的内容不可修改,适合存储常量数据。
字段名访问可以通过字段名(如obj.field)访问元素,代码更易读。
内存效率与普通类相比,namedtuple占用更少内存,性能更高。
定义方式使用namedtuple(typename, field_names)创建。
_fields返回所有字段名的元组。
_make(iterable)从可迭代对象创建namedtuple实例。
_asdict()namedtuple转换为字典。
_replace(**kwargs)返回一个新的namedtuple实例,替换指定字段的值。

1. namedtuple的概念

namedtuplecollections模块中的一个工厂函数,用于创建具有字段名的元组。它的主要特点是:

  • 不可变性:一旦创建,内容不可修改。
  • 字段名访问:可以通过字段名访问元素,代码更易读。
  • 内存效率:与普通类相比,namedtuple占用更少内存,性能更高。

2. namedtuple的用法

2.1 创建namedtuple
from collections import namedtuple

# 定义一个表示二维点的namedtuple
Point = namedtuple('Point', ['x', 'y'])

# 创建实例
p = Point(10, 20)
print(p.x, p.y)  # 输出: 10 20
2.2 访问字段
# 通过字段名访问
print(p.x)  # 输出: 10
print(p.y)  # 输出: 20

# 通过索引访问
print(p[0])  # 输出: 10
print(p[1])  # 输出: 20

3. namedtuple的常见方法

3.1 _fields:查看字段名
print(p._fields)  # 输出: ('x', 'y')
3.2 _make(iterable):从可迭代对象创建实例
# 从列表创建
p2 = Point._make([30, 40])
print(p2)  # 输出: Point(x=30, y=40)
3.3 _asdict():转换为字典
print(p._asdict())  # 输出: {'x': 10, 'y': 20}
3.4 _replace(**kwargs):替换字段值
# 替换x的值
p3 = p._replace(x=100)
print(p3)  # 输出: Point(x=100, y=20)

4. namedtuple的8个应用案例

案例1:表示二维坐标
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(f"坐标: ({p.x}, {p.y})")  # 输出: 坐标: (10, 20)
案例2:表示RGB颜色
Color = namedtuple('Color', ['red', 'green', 'blue'])
white = Color(255, 255, 255)
print(f"白色: {white}")  # 输出: 白色: Color(red=255, green=255, blue=255)
案例3:表示学生信息
Student = namedtuple('Student', ['name', 'age', 'grade'])
s = Student('Alice', 20, 'A')
print(f"学生: {s.name}, 年龄: {s.age}, 成绩: {s.grade}")  # 输出: 学生: Alice, 年龄: 20, 成绩: A
案例4:表示日期
Date = namedtuple('Date', ['year', 'month', 'day'])
d = Date(2023, 10, 5)
print(f"日期: {d.year}-{d.month}-{d.day}")  # 输出: 日期: 2023-10-5
案例5:表示书籍信息
Book = namedtuple('Book', ['title', 'author', 'year'])
b = Book('Python编程', 'Guido van Rossum', 2020)
print(f"书籍: {b.title}, 作者: {b.author}, 出版年份: {b.year}")  # 输出: 书籍: Python编程, 作者: Guido van Rossum, 出版年份: 2020
案例6:表示几何图形
Circle = namedtuple('Circle', ['radius', 'center'])
c = Circle(5, Point(0, 0))
print(f"圆: 半径={c.radius}, 中心=({c.center.x}, {c.center.y})")  # 输出: 圆: 半径=5, 中心=(0, 0)
案例7:表示购物车商品
Product = namedtuple('Product', ['name', 'price', 'quantity'])
item = Product('手机', 2999, 2)
print(f"商品: {item.name}, 单价: {item.price}, 数量: {item.quantity}")  # 输出: 商品: 手机, 单价: 2999, 数量: 2
案例8:表示网络请求的响应
Response = namedtuple('Response', ['status_code', 'data', 'headers'])
res = Response(200, {'message': '成功'}, {'Content-Type': 'application/json'})
print(f"响应: 状态码={res.status_code}, 数据={res.data}, 头信息={res.headers}")  # 输出: 响应: 状态码=200, 数据={'message': '成功'}, 头信息={'Content-Type': 'application/json'}

总结

namedtuple是Python中一个非常实用的工具,能够显著提升代码的可读性和性能。通过本文的详细讲解和8个实际案例,读者可以快速掌握namedtuple的使用方法,并在实际项目中灵活应用。无论是表示简单的二维坐标,还是复杂的网络响应,namedtuple都能胜任!

相关文章:

  • 【附JS、Python、C++题解】Leetcode面试150题(9)——三数之和
  • C语言基础知识04
  • 2025-03-10 学习记录--C/C++-PTA 习题11-4 字符串的连接
  • Mysql_DML
  • java中如何把json转化的字符串再转化成json格式
  • python画图文字显示不全+VScode新建jupyter文件
  • 《SQL性能优化指南:新手如何写出高效的数据库查询
  • C# 事件使用详解
  • CPT208 Human-Centric Computing 人机交互 Pt.1
  • vue3 动态添加路由并生成左侧菜单栏
  • JavaScript中Promise详解
  • 蓝桥杯2024年第十五届省赛真题-回文数组
  • 数据库之PostgreSQL详解(待补充)
  • 一文了解JVM的垃圾回收
  • BIG_EVENT
  • IDS 和 IPS 日志监控的重要性
  • JVM内存结构笔记05-直接内存
  • 深度学习----激活函数
  • VS Code 配置优化指南
  • 《大语言模型》学习笔记(一)
  • 美国少年 建设网站/一键生成app制作器
  • 做微电网的公司网站/在线培训app
  • 知名网站建设公司电话/windows7系统优化工具
  • 服务器多少钱/优化防疫政策
  • 房地产新闻app哪个好/优化师的工作内容
  • 做网站的注意点/seo排名优化教程