collections--容器数据类型
这个模块提供了Python标准内建容器dict,list,tuple,set的替代选择。
namedtuple() | 创建命名元组子类的工厂函数 |
deque | 类似于列表,实现了在两端快速添加和弹出 |
ChainMap | 类似于字典,将多个映射集合到一个视图里面 |
Counter | 字典的子类,提供了可哈希对象的计数功能 |
OrderedDict | 字典的子类,保存了他们被添加的顺序 |
defaultdict | 字典的子类,提供一个工厂函数,为字典查询提供一个默认值 |
UserDict | 封装了字典对象,简化了字典子类化 |
UserList | 封装了列表对象,简化了列表子类化 |
UserString | 封装了字符串对象,简化了字符串子类化 |
一、namedtuple()命名元组的工厂函数
生成可以使用名字访问元素内容的tuple子类,命名元组赋予每个位置一个含义,提供可读行和自文档性。他们可以用于任何普通元组,并添加了通过名字获取值的能力,通过索引也可以获取。
1、参数介绍
namedtuple(typename,field_names,*,rename=False,default=None, module=None)
1)typename:创建的tuple子类的类名,相当于定义一个新类
2)field_names:是一个字符串序列,如[x,y]。此外也可以直接使用单个字符串代表所有的字段名,多个字段名用空格,逗号隔开,如'x,y'或'x y'。任何有效的Python标识符都可以作为字段名(不能以下划线开头)。有效的标识符可由字母、数字、下划线组成,但不能以数字、下划线开头,也不能是关键字。
3)rename:如果设置为True,无效的字段名会被自动替换为位置名。
4)default:可以为None或者一个默认值的iterable。如果一个默认值域必须和其他没有默认值的一起出现,default就应用到最右边的参数。
5)module:如果设置该参数,该类将位于该模块下,因此该自定义类的__module__属性将被设置为该参数值。
2、小例子
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(11, y=12)
print(p[0] + p[1])
# >>> 23
x, y = p
print(x, y)
# >>> 11 12
print(p.x, p.y)
# >>> 11 12
print(p)
# >>> Point(x=11, y=12)
3、方法
除了继承元组的方法,命名元组还支持三个额外的方法和两个属性。为了防止字段名冲突,方法和属性以下划线开始。
1)_make(iterable):类方法从存在的序列或迭代实例创建一个新实例
>>> t = [11, 22]
>>> Point._make(t)
Point(x=11, y=22)
2)_asdict():返回一个新的 dict ,它将字段名称映射到它们对应的值。
>>> p = Point(x=11, y=22)
>>> p._asdict()
{'x': 11, 'y': 22}
3)_replace(**kwargs):返回一个新的命名元组实例,并将指定域替换为新的值。
>>> p = Point(x=11, y=22)
>>> p._replace(x=33)
Point(x=33, y=22)
4、属性
1)_fileds:字符串元组列出了字段名。用于提醒和从现有元组创建一个新的命名元组类型。
>>> p._fields
('x', 'y')
>>> Color = namedtuple('Color', 'red green blue')
>>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)
>>> Pixel(11, 22, 128, 255, 0)
Pixel(x=11, y=22, red=128, green=255, blue=0)
2)_field_defaults:字典将字段名称映射到默认值。