python namedtuple默认值_python 使用 namedtuple

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

一、为什么要使用namedtuple?

python的tuple是一种不可变元素,因此这种数据结构是非常高效的。

我们在使用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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值