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 | 封装了列表对象,简化了字符串子类化 |
这哥们为什么会被造出来呢?我们先看它的兄弟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
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