自学Python标准库(1)

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:字典将字段名称映射到默认值。


                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值