说说 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月17日 05时31分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
qlineedit tab焦点处无法输入问题
2021-07-03
android精确绘制文字位置的方法
2021-07-03
Android中UI线程与后台线程交互设计的5种方法
2021-07-03
[Android]调用字符串资源的几种方法
2021-07-03
Android更新UI的两种方法——handler与runOnUiThread()
2021-07-03
Java中new Thread的弊端及Java四种线程池的使用
2021-07-03
android线程与UI消息传递
2021-07-03
java枚举定义
2021-07-03
[翻译][Java]ExecutorService的正确关闭方法
2021-07-03
QT父子窗口事件传递与事件过滤器
2021-07-03
Qt到Cortex-A8的移植
2021-07-03
Qt4.7.3交叉编译移植
2021-07-03
luvcview摄像头程序到Cortex A8的安装移植
2021-07-03
Android开发书籍书籍介绍:
2021-07-03
QT 的信号与槽机制介绍
2021-07-03
Qt信号槽机制与Q_OBJECT
2021-07-03
Q_OBJECT信号槽与继承关系
2021-07-03
android定时器、消息任务与问题解决
2021-07-03
Qt模拟键盘按键按下
2021-07-03
android、java获得代码执行时长
2021-07-03