Python API:namedtuple函数 定义命名元组

函数原型

python3.7中的原型,python3.6仅仅是少了defaults参数

collections.namedtuple(typenamefield_names*rename=Falsedefaults=Nonemodule=None)

函数功能

命名元组的工厂函数,用于构建只含有少量属性,没有方法的类。命名元组赋予每个位置一个含义,提供可读性和自文档性。它们可以用于任何普通元组,并添加了通过名字获取值的能力,通过索引值也是可以的。

参数说明

typename,表示返回元组子类,和元组的区别在于可以通过域名(参数field_names)来获取属性值。当然,和元组相同,也可以通过索引和迭代获取值。

field_names, 可以是像 [‘x’, ‘y’] 一样的字符串序列,也可以是一个纯字符串,用空白或逗号分隔开元素名,比如 'x y' 或者 'x, y' 。任何非下划线开头的Python 标识符都可以充当域名。另外域名也不能是关键词 keyword, 比如 class, for, return, global等。

rename ,如果为真,无效域名会自动转换成位置名。比如 ['abc', 'def', 'ghi', 'abc'] 转换为 ['abc', '_1', 'ghi', '_3'] ,使用“下换线+下标”的名称替换掉无效关键词 def 和重复域名 abc 。看到这里应该会有疑问,这不就和面说的不能以下划线开头矛盾了吗?注意,这里是当rename参数为真时,python为我们替换的,而直接使用“_1”、“_3”这样的域名同样会被告知域名错误。

defaults, 可以为 None 或者是一个默认值的 iterable 。如果一个默认值域必须跟其他没有默认值的域在一起出现,defaults 就应用到最右边的参数。比如如果域名 ['x', 'y', 'z'] 和默认值 (1, 2) ,那么 x 就必须指定一个参数值 ,y 默认值 1 , z 默认值 2 。请注意,python3.7后才添加的defaults参数和 _field_defaults 属性。

module,用于设置命名元组的 __module__ 属性值。

支持的方法和属性

除了继承自元组的通用方法外,namedtuple还支持三个额外的方法和两个属性。为了防止域名冲突,方法和属性以下划线开始。

classmethod somenamedtuple._make(iterable)类方法,从存在的序列或迭代实例创建一个新实例。

somenamedtuple._asdict()

返回一个新的 dict ,它将字段名称映射到它们对应的值;

somenamedtuple._replace(**kwargs)

返回一个新的命名元组实例,并将指定域替换为新的值;

somenamedtuple._fields

字符串元组列出了域名。用于提醒和从现有元组创建一个新的命名元组类型;

somenamedtuple._field_defaults

默认值的字典,python3.7之后添加

函数和属性举例

>>> t = [11, 22]
>>> Point._make(t)
Point(x=11, y=22)


>>> p = Point(x=11, y=22)
>>> p._asdict()
OrderedDict([('x', 11), ('y', 22)])


>>> p = Point(x=11, y=22)
>>> p._replace(x=33)
Point(x=33, y=22)



>>> 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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值