本篇内容主要讲解“python namedtuple的作用是什么及怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python namedtuple的作用是什么及怎么用”吧!
点评:Python标准库的
collections
模块提供了很多有用的数据结构,这些内容并不是每个开发者都清楚,就比如题目问到的namedtuple
,在我参加过的面试中,90%的面试者都不能准确的说出它的作用和应用场景。此外,deque
也是一个非常有用但又经常被忽视的类,还有Counter
、OrderedDict
、defaultdict
、UserDict
等类,大家清楚它们的用法吗?
在使用面向对象编程语言的时候,定义类是最常见的一件事情,有的时候,我们会用到只有属性没有方法的类,这种类的对象通常只用于组织数据,并不能接收消息,所以我们把这种类称为数据类或者退化的类,就像C语言中的结构体那样。我们并不建议使用这种退化的类,在Python中可以用namedtuple
(命名元组)来替代这种类。
from collections import namedtuple Card = namedtuple('Card', ('suite', 'face')) card1 = Card('红桃', 13) card2 = Card('草花', 5) print(f'{card1.suite}{card1.face}') print(f'{card2.suite}{card2.face}')
命名元组与普通元组一样是不可变容器,一旦将数据存储在namedtuple
的顶层属性中,数据就不能再修改了,也就意味着对象上的所有属性都遵循“一次写入,多次读取”的原则。和普通元组不同的是,命名元组中的数据有访问名称,可以通过名称而不是索引来获取保存的数据,不仅在操作上更加简单,代码的可读性也会更好。
命名元组的本质就是一个类,所以它还可以作为父类创建子类。除此之外,命名元组内置了一系列的方法,例如,可以通过_asdict
方法将命名元组处理成字典,也可以通过_replace
方法创建命名元组对象的浅拷贝。
class MyCard(Card): def show(self): faces = ['', 'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] return f'{self.suite}{faces[self.face]}' print(Card) # <class '__main__.Card'> card3 = MyCard('方块', 12) print(card3.show()) # 方块Q print(dict(card1._asdict())) # {'suite': '红桃', 'face': 13} print(card2._replace(suite='方块')) # Card(suite='方块', face=5)
总而言之,命名元组能更好的组织数据结构,让代码更加清晰和可读,在很多场景下是元组、字典和数据类的替代品。在需要创建占用空间更少的不可变类时,命名元组就是很好的选择。
到此,相信大家对“python namedtuple的作用是什么及怎么用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。