如何通过Python的命名元组(Namedtuple)来增强代码可读性?

1,971次阅读
没有评论

共计 2773 个字符,预计需要花费 7 分钟才能阅读完成。

Python 命名元组,命名元组示例,命名元组用法

Python 的 collection 模块提供了一项特性叫做“命名元组”(Namedtuple),它是一个具有命名元素的元组,使得代码更加表达性。就像 Python 中的字典一样,命名元组允许我们使用元组的成员而不是索引来访问元素。

Python 的命名元组(Namedtuple)

创建命名元组

要创建一个命名元组,我们需要使用 collection 模块中的 namedtuple 函数。

from collections import namedtuple
# 定义一个名为 Employee 的命名元组,它具有 id、name 和 location 字段。Employee = namedtuple('Employee', 'id name location')
# 创建 Employee 的实例
employee1 = Employee(id=10, name='John Doe', location='Atlanta')
employee2 = Employee(id=11, name='Mick', location='Dallas')

访问命名元组中的元素

命名元组提供了两种访问元素的机制。第一种是通过属性名来访问元素,第二种是使用传统的数值索引。

print(f"{employee1.name} - {employee1.location}")  # John Doe - Atlanta
print(f"{employee2.name} - {employee2.location}")  # Mick – Dallas

也可以使用数值索引来访问元素。

print(f"{employee1[1]} - {employee1[2]}")  # John Doe - Atlanta
print(f"{employee2[1]} - {employee2[2]}")  # Mick – Dallas

不可变性

命名元组继承了普通元组的不可变性,这是其一个基本特性。这意味着一旦在创建过程中设置了字段的值,就无法修改它。

try:
    employee1.name = 'David'
except AttributeError as e:
    print(f"AttributeError: {e}")  # AttributeError: can't set attribute

方法

`namedtuple` 不仅提供了一种清晰易读的方式来结构化数据,还提供了一些有用的方法,这些方法增强了 `Namedtuple` 的功能。

a) `_asdict()`:`_asdict()` 方法将命名元组作为字典返回,提供了一种将 `Namedtuple` 转换为与其他数据结构兼容的格式的便捷方式。

employee1._asdict()  # {'id': 10, 'name': 'John Doe', 'location': 'Atlanta'}

b) `_replace()`:`_replace()` 方法创建一个具有指定字段替换为新值的新实例的命名元组。这个方法在保持不可变性的同时允许修改非常关键。

employee1_modified = employee1._replace(location='DFW')
employee1_modified  # Employee(id=10, name='John Doe', location='DFW')

c) `_make()`:`_make(iterable)` 方法从可迭代对象中创建一个命名元组的新实例。例如,我们可以使用 `_make()` 方法从列表中创建一个命名元组。

employee_list = [21, 'Bob','Gallup']
Employee._make(employee_list)  # Employee(id=21, name='Bob', location='Gallup')

命名元组的拆包

通过拆包过程,Python 的命名元组可以使

我们能够将它们的值分配给单独的变量,实现简洁的语句。

id, name, location = employee1
print(f"id: {id}, name: {name}, location:{location}")

将命名元组转换为不同的数据结构

通过使用 `list()` 构造函数,可以将命名元组转换为列表。以下是一个示例:

list(employee1)  # [10, 'John Doe', 'Atlanta']

使用 `_asdict()` 方法,可以将命名元组转换为字典,该方法返回一个有序字典,可以将其转换为常规字典。以下是一个示例:

dict(employee1._asdict())  # {'id': 10, 'name': 'John Doe', 'location': 'Atlanta'}

使用命名元组的优势

可读性

命名元组通过为元素提供有意义的名称来使代码更加可读,消除了基于索引访问的需求。

不可变性

和普通元组一样,命名元组是不可变的。一旦创建,它们的值不能被改变。

内存高效

相对于等价的类,命名元组在内存上更加高效,占用更少的空间。需要注意的是,使用命名元组所获得的内存效率在涉及大量实例或处理大型数据集的场景中更为常见。

轻量级数据结构

适用于创建简单类,无需自定义方法。

数据存储

在不需要完整的类的情况下,方便存储结构化数据。

APIs 和数据库记录

对于表示从数据库返回的记录或从 API 接收的数据非常有用。

Python 中的命名元组非常适合需要简单、不可变的具有命名字段的数据结构的场景,例如:

  • 配置设置:使用命名元组表示配置设置,具有命名字段以提高清晰度和易访问性。

  • 数据库记录:命名元组可以表示数据库记录,清楚地显示哪个字段对应于表中的哪个列。

  • 命令行解析:使用命名元组存储解析的命令行参数,为输入参数提供清晰结构。

  • 命名常量:命名元组可用于表示代码中的命名常量,以清晰而可读的方式定义常量值。

通过提供清晰、易读和不可变性,命名元组在这些场景中表现出色,是一种有价值的工具来简洁地结构化数据。 文章来源地址 https://www.toymoban.com/diary/python/649.html

到此这篇关于如何通过 Python 的命名元组(Namedtuple)来增强代码可读性?的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!

原文地址:https://www.toymoban.com/diary/python/649.html

如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计2773字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)