Python中的高级元组---collections.namedtuple

collections.namedtuple是python中为了改善原始元组tuple无法对内部数据进行命名的局限性而提供的一个工具包。这个工厂函数,来构造一个带字段名的元组。具名元组的实例和普通元组消耗的内存一样多,因为字段名都被存在对应的类里面。这个类跟普通的对象实例比起来也要小一些,因为 Python 不会用 __dict__ 来存放这些实例的属性。
具名元组的定义如下
tuple1 = collections.namedtuple(typename, field_names, rename=False) 

返回的是一个具名元组的对象

  • typename:元组名称
  • field_names: 元组内元素的名称
  • rename: 如果元素名称中含有 python 的关键字,则必须设置为 rename=True
from collections import namedtuple
    
# student = namedtuple('student', 'name sex age hobby')
student = namedtuple("student",
                          ['name', # the name of student
                           'sex',  # the sex of student
                           'age',  # the sex of student
                           'hobby' # the hobby of student
                           ])
stu = student("tom", 'man', 21, ['piano', 'basketball'])
print(stu)
print(stu.name)
print(stu.sex)
print(stu.age)
print(stu.hobby)
输出
student(name='tom', sex='man', age=21, hobby=['piano', 'basketball'])
tom
man
21
['piano', 'basketball']

代码中可以看出:

  • 具名元组和元组具有同样的性质就是元素是可以有多种类型的
  • 具名元组的第一个元素是具名元组的名称,第二个是元组内的元素名称。有两种方式:① 元素名称用空格隔开写在同一个字符串中 ② 元素名称用一个列表包起来。

我们可以用类似于对象.属性的方式来访问里边元素的值。

除了直接创建对象的方式来创建,也可以用_make(list)来进行对象的创建

stu02 = student._make(["paddy", 'man', 18, ['painting', 'riding']])
print(stu02)
输出
student(name='paddy', sex='man', age=18, hobby=['painting', 'riding'])

可以使用_replace(元素名=值)修改元素的值

stu02 = stu02._replace(age=20)
print(stu02)
输出
student(name='paddy', sex='man', age=20, hobby=['painting', 'riding'])

还可以使用_asdict()将具名元组转换为dict这个字典是有序字典OrderedDict

print(stu02._asdict())
输出
OrderedDict([('name', 'paddy'), ('sex', 'man'), ('age', 20), ('hobby', ['painting', 'riding'])])

你可能感兴趣的:(Python中的高级元组---collections.namedtuple)