Python测试常用库collections之namedtuple

collections是python的标准库,它提供了一些解决特定问题的容器,也就是说有些问题虽然可以用list,tuple,dict解决,但解决起来太麻烦,而这些问题又经常遇到,所以他们就把这些问题的通用方法整理了出来,放到collections库中让人使用。

collections中一共有9种容器,其中counter、defaultdict、deque、namedtuple、orderdict比较常用。

方法 作用
namedtuple() 创建命名元组子类的工厂函数
deque 类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
ChainMap 类似字典(dict)的容器类,将多个映射集合到一个视图里面
Counter 字典的子类,提供了可哈希对象的计数功能
OrderedDict 字典的子类,保存了他们被添加的顺序
defaultdict 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值
UserDict 封装了字典对象,简化了字典子类化
UserList 封装了列表对象,简化了列表子类化
UserString 封装了列表对象,简化了字符串子类化

今天来学习namedtuple

这哥们为什么会被造出来呢?我们先看它的兄弟tuple,对于tuple大家应该都很熟悉。

tp = (1,2,3,4)

这就是一个元组了,元组通过下标访问元素。

tp[0]
tp[2]

但这时就有大佬不爽了,大佬们开发时经常遇到一种情况,既想要元素不能改变,又想要可以通过访问字典的方式访问元素,他们想要一种容器将tuple的不可变和字典的key结合起来,于是namedtuple诞生了。

namedtuple最大的特点就是可以给元素起名字,其中用到一个设计模式是工厂模式,详情请看!

定义对象

stud = namedtuple('stud', ['name', 'age', 'address'])

它有3种方式定义对象,但我觉得知道这一种就够了,其他两种看着很别扭。

其他两种

stud = namedtuple('stud', 'name, age, address'])
stud = namedtuple('stud', 'name age address'])

取值就可以直接类似取属性的方式

s.name
s.age
s.address

还可以转换为dict

s._asdict()

取值和字典一样了

s._asdict()['name']
from collections import namedtuple

stud = namedtuple('stud', ['name', 'age', 'address'])

s = stud('ws', '22', '火星')

print(s)
print(s.name)
print(s.age)
print(s.address)

print(s._asdict()['name'])

stud(name='ws', age='22', address='火星')
ws
22
火星
ws

你可能感兴趣的:(Python)