说说 Python 的具名元组
发布日期:2021-06-29 21:04:32 浏览次数:3 分类:技术文章

本文共 1498 字,大约阅读时间需要 4 分钟。

Python 提供的元组与列表类似,不同之处在于元组的元素不能修改。虽然有时候很方便,但因为不能为元组内部的数据进行命名,所以没有那么直观。

Python 引入了 collections.namedtuple 这个工厂函数,用来构造一个带字段名的元组。

(1)声明与实例化

我们一般这样来构造具名元组:

namedtuple(typename, field_names)
参数 说明
typename 元组名称。
field_names 元组中元素的名称;可以是有多个字符串组成的可迭代对象,或者是有空格分隔开的字段名组成的字符串。

下面是声明一个具名元组及其实例化方法的示例:

import collectionsimport logginglogging.basicConfig(level=logging.DEBUG, format='%(levelname)s - %(message)s')Card = collections.namedtuple('Card', ['rank', 'suit'])select_card=Card('10', 'spades')logging.info('select_card -> %s',select_card)

运行结果:

INFO - select_card -> Card(rank='10', suit='spades')

这里通过 collections.namedtuple 创建了一个具名元组,用来表示一张扑克牌。rank 表示扑克牌点数,suit 表示花色。可以通过字段名或者位置来实例化一个具名元组。这里的 select_card 表示抽到一张黑桃 10。

(2)特有属性与方法

具名元组还拥有以下这些特有的属性与方法。

特有属性与方法 说明
_fields 该具名元组所包含的所有字段名的元组
_make(iterable) 接受一个可迭代对象来创建具名元组实例
_asdict() 返回 collections.OrdereDict 形式,可以利用它来展示元组内的信息
# 展示所有属性名称logging.info('select_card._fields -> %s',select_card._fields)# _make 接受 list 作为入参select_card=Card._make(['10', 'spades'])logging.info('select_card -> %s',select_card)# 转换为字典logging.info('select_card._asdict() -> %s',select_card._asdict())

运行结果:

INFO - select_card._fields -> ('rank', 'suit')INFO - select_card -> Card(rank='10', suit='spades')INFO - select_card._asdict() -> {'rank': '10', 'suit': 'spades'}

另外,通过 . 语法还可以获取具名元组中所对应的属性值:

logging.info('select_card.rank -> %s',select_card.rank)logging.info('select_card.suit -> %s',select_card.suit)

运行结果:

INFO - select_card.rank -> 10INFO - select_card.suit -> spades

转载地址:https://deniro.blog.csdn.net/article/details/106870401 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:系统架构设计笔记(40)—— 系统运行环境的集成与设计
下一篇:系统架构设计笔记(39)—— 简单分布式系统设计

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月17日 05时31分38秒