美文网首页
Python中的高级元组---collections.named

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

作者: 渺茫的小怪兽 | 来源:发表于2019-12-10 21:58 被阅读0次
    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.named

          本文链接:https://www.haomeiwen.com/subject/nkhngctx.html