美文网首页
python 使用 namedtuple

python 使用 namedtuple

作者: eeert2 | 来源:发表于2020-03-19 09:56 被阅读0次

    有人说数据结构才是编程的灵魂,可见数据结构的重要性。

    一、为什么要使用namedtuple?

    pythontuple是一种不可变元素,因此这种数据结构是非常高效的。
    我们在使用tuple结构的时候可以通过解压和下标索引来获取元素内容:

    user = ('eeert',18,'杭州市')
    name,age,address = user # 元组支持解压
    print(name,age,address) # eeert 18 杭州
    
    # 元组支持索引
    name = user[0]
    age = user[1]
    address = user[2]
    print(name,age,address) # eeert 18 杭州
    

    但是上面也引出了一个问题:
    你怎么知道第一个元素就是"name",第二个元素是"age",第三个元素是"address"?


    你不要以为我是在抬杠,而是这确实是一个问题,namedtuple的主要用途是将你的代码从下标操作中解脱出来。

    二、如何使用namedtuple

    借助collections.namedtuple,我们可以创建一个namedtuple类,"注意"这里创建的是类,而不是对象。

    在这个里面,我们指定类的名称属性

    User = namedtuple('User', ['name', 'age', 'address'])
    
    user = User('eeert', 34, '杭州')
    
    # 可以和普通元组一样使用
    name, age, address = user
    print(name, age, address)
    
    # 同时可以通过属性名称来访问
    name = user.name
    age = user.age
    address = user.address
    

    我们可以向普通的元组一样使用它,同时也可以通过属性名称来访问它,而且像pycharm这种工具还会有代码提醒

    截屏2020-03-1909.34.23.png

    可能有人要说我通过创建一个普通的类也能完成啊

    是的你确实可以这样做,但是namedtuple是元组的扩展,它是不可变的,所以它舍弃了python对象的很多方法,结构更高效。

    同时我们使用起来也更便捷,通过一行代码就能完成,而不是通过定义class ……

    三、nametuple的常用方法

    元组是一种很高效,不可变的结构,这是它的特点,也决定了它的使用场景。

    1. _replace

    如果我们要改变nametuple的值,那么可以使用_replace。[ 虽然这违背了使用元组的原则 ]

    from collections import namedtuple
    
    if __name__ == '__main__':
        User = namedtuple('User', ['name', 'age', 'address'])
    
        user = User('eeert', 18, '杭州')
        new_user = user._replace(age=17)
    
        print(user, new_user, sep='\n')
        # User(name='eeert', age=18, address='杭州')
        # User(name='eeert', age=17, address='杭州')
    

    _replace会在我们元组的基础上生成一个新的元组。这样并不高效,我们应该避免这种操作。

    如果你要的数据结构经常有这种更改属性的操作,那么请使用字典dict

    相关文章

      网友评论

          本文标题:python 使用 namedtuple

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