流畅的Python阅读笔记:具名元组

前两天再阅读2.3.4节时看到了具名元组,但是当时没有想太多,以为就是给参数创建元组就完事儿了,结果今天回头看了一下,发现跟当时想的不太一样,结合官方文档总结了一下。

首先,具名元组的意义就是用来标识元组标识的意义,因为直接创建元组的方法并不能使程序的阅读人员理解元组中的参数代表什么意义,使用具名元组可以解决这个问题,元组名,元组的各个字段的名字。下面还是结合文档内容对照看一下。

collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
返回一个新的元组子类,名为 typename 。这个新的子类用于创建类元组的对象,可以通过字段名来获取属性值,同样也可以通过索引和迭代获取值。子类实例同样有文档字符串(类名和字段名)另外一个有用的___repr__() 方法,以 name=value 格式列明了元组内容。

field_names 是一个像 [‘x’, ‘y’] 一样的字符串序列(可迭代对象)。同时 field_names可以是一个纯字符串,用空白或逗号分隔开元素名,比如 ‘x y’ 或者 ‘x, y’ 。

任何有效的Python标识符都可以作为字段名,除了下划线开头的那些。有效标识符由字母,数字,下划线组成,但首字母不能是数字或下划线,另外不能是关键词keyword 比如 class, for, return, global, pass, 或 raise 。

如果 rename 为真, 无效字段名会自动转换成位置名。比如 [‘abc’, ‘def’, ‘ghi’, ‘abc’] 转换成
[‘abc’, ‘_1’, ‘ghi’, ‘_3’] , 消除关键词 def 和重复字段名 abc 。

defaults 可以为 None 或者是一个默认值的 iterable
。如果一个默认值域必须跟其他没有默认值的域在一起出现,defaults 就应用到最右边的参数。比如如果域名 [‘x’, ‘y’, ‘z’]
和默认值 (1, 2) ,那么 x 就必须指定一个参数值 ,y 默认值 1 , z 默认值 2 。

如果 module 值有定义,命名元组的 module 属性值就被设置。

命名元组实例没有字典,所以它们要更轻量,并且占用更小内存。

要支持封存操作,应当将命名元组类赋值给一个匹配 typename 的变量。

上面的定义讲到几个参数的使用,typename就是我们创建的元组子类的类名(为什么说是类名,我一开始也没有想明白就忽略了,现在回头看一下,发现其实创建具名元组就像是类的实例化,如下tokyo=City(‘Tokyo’,‘Jp’,32.3),再想想类的实例化还真是那么回事儿。)另外赋值运算符左边的City就是参数类名,两者保持一致就可以了。

from collections import namedtuple

City=namedtuple('City','name country population')
tokyo=City('Tokyo','Jp',32.3)
print(tokyo)

书上还讲了另一个参数,是类的各个字段的名字,有两种标识方式,一种就是可迭代对象,列表、元组,另一种就是一个字符串里面用空格分隔字段名。[‘x’,‘y’,‘z’]或‘x y z’。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对不起,我头发很多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值