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

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

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

领支付宝红包 赞助服务器费用
上一篇 2023年12月31日 13:57
探索是否可以利用人工智能驱动的云服务增强银行业的反洗钱
下一篇 2024年01月01日 16:36

相关文章

  • 【Python 高级特性】深入 NamedTuple 命名元组

    和元组 tuple 一样,NamedTuple 也是 不可变数据类型 ,创建之后就不能改变内容。 如其名,和 tuple 的区别在于“Named”,即\\\"命名\\\"。 NamedTuple 不像数组那样使用下标读写,反而和类相似,使用 . 来读写。 创建 NamedTuple 的函数定义 参数说明: typename :新创建的类的名称。 field_

    2024年04月11日
    浏览(42)
  • Python中的命名元组(namedtuple)到底是什么东西?干嘛用的?

    Python中有一种特殊的元组叫做命名元组,英文名叫namedtuple。 为什么要用命名元组呢? 思考下面的问题: 如何设计数据结构承载一个五维的数据,如一个学生的基本信息? 方法有二: 1. Python是面向对象语言,可以使用class,定义一个学生类,将五维信息作为属性,这是一个

    2024年02月10日
    浏览(52)
  • 如何使用 Python 通过代码创建图表

    简介 Diagram as Code 工具允许您创建基础架构的架构图。您可以重复使用代码、测试、集成和自动化绘制图表的过程,这将使您能够将文档视为代码,并构建用于映射基础架构的流水线。您可以使用 diagrams 脚本与许多云提供商和自定义基础架构。 在本教程中,您将使用 Python 创

    2024年02月20日
    浏览(44)
  • 19ContraBERT:顶会ICSE23 数据增强+对比学习+代码预训练模型,提升NLP模型性能与鲁棒性:处理程序变异(变量重命名)【网安AIGC专题11.15】

    随着大规模代码的崛起, 无监督学习 成为了提高代码预训练模型性能的有效手段。这些预训练模型在广泛的下游任务中表现出色,如自然语言处理和程序语言处理。例如,像CodeBERT和GraphCodeBERT这样的模型在预训练阶段通过大规模代码数据学到通用的表示,并在下游任务上进

    2024年02月05日
    浏览(79)
  • chatgpt赋能python:Python学习笔记:如何合并元组

    在Python中,元组是一种不可变的数据结构。当我们需要组合不同的元组时,我们可以使用元组合并的方法来实现。在本文中,我们将学习如何使用Python语言来合并元组。 在Python语言中,元组是一种有序的数据类型,可以包含零个或多个任意类型的元素。和列表相似,但是元组

    2024年02月08日
    浏览(53)
  • 企业如何通过熔断降级增强服务稳定性和系统可用性?

    API 的调用稳定性被视为数据服务的最重要的指标。该指标的影响因素是多种多样的,「袋鼠云数据服务平台 DataAPI」不仅多次对于调用性能和稳定性进行压测和调优,而且还提供了多种配置项优化手段供客户进行自行调优。但是当遇到不可预期的大流量或其他突然情况时还是

    2024年02月05日
    浏览(58)
  • 【Python】【编程技巧】给切片命名,使代码清晰可读

    使用内置的 slice 函数创建切片,而不是硬编码下标,从而增强代码可读性,例如: https://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p11_naming_slice.html

    2024年02月10日
    浏览(69)
  • Python如何对文件进行重命名操作?

    目录 一、引言 二、Python文件重命名的方法 三、注意事项 四、示例代码 五、高级应用 1、批量重命名文件 2、根据规则重命名文件 在Python中,对文件进行重命名是一项常见的操作。文件重命名通常用于整理文件、改变文件类型或者根据程序的需求修改文件名。本篇文章将深入

    2024年01月25日
    浏览(49)
  • Python自动人工智能训练数据增强工具 | DALI介绍(含代码)

    深度学习模型需要数百 GB 的数据才能很好地概括未见过的样本。 数据扩充有助于增加数据集中示例的可变性。 当数据增强的选择依赖于设置模型训练的工程师的领域知识、技能和直觉时,传统的数据增强方法可以追溯到统计学习。 出现了自动增强以减少对手动数据预处理的

    2024年02月07日
    浏览(59)
  • 基于深度学习的人脸识别与管理系统(UI界面增强版,Python代码)

    摘要:人脸检测与识别是机器视觉领域最热门的研究方向之一,本文详细介绍博主自主设计的一款基于深度学习的人脸识别与管理系统。博文给出人脸识别实现原理的同时,给出 P y t h o n 的人脸识别实现代码以及 P y Q t 设计的UI界面。系统实现了集识别人脸、录入人脸、管理

    2024年01月20日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包