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。
python namedtuple默认值_python 使用 namedtuple相关推荐
- Python函数默认值参数的2个坑
在定义函数时,Python支持默认值参数,在定义函数时可以为形参设置默认值.在调用带有默认值参数的函数时,可以不用为设置了默认值的形参进行传值,此时函数将会直接使用函数定义时设置的默认值,当然也可以通 ...
- python参数默认值实例_Python中使用partial改变方法默认参数实例
#!/usr/bin/env python # -*- coding: utf-8 -*- #python2.7x #partial.py #authror: orangleliu ''' funct ...
- python中的def函数括号里的默认值_Python中的默认参数值
Python对默认参数值的处理方法是少有的几个易使大多数新手Python程序员犯错的地方之一.(通常只犯一次) 导致困惑的地方是当你使用"可变"对象作为(参数的)默认值时的(程序) ...
- python tkinter entry默认值_Python ---(六)Tkinter窗口组件:Entry
The Tkinter Entry Widget ##简介 Entry(输入框)组件通常用于获取用户的输入文本. ##何时使用 Entry 组件? Entry 组件仅允许用于输入一行文本,如果用于输入 ...
- python return返回值_Python return语句 函数返回值
return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...
- python函数默认参数_Python中函数的默认参数问题
前几天,运营反馈了一个BUG,某些数据在写入数据库后,其时间字段出现异常,与当前时间相差较多. 由于代码是不是我写的,所以开始一遍阅读代码一遍排查问题. 在主流程中,仅仅发现了一个对时间赋值的语句,并 ...
- python参数默认值
官方文档很详细啊! python官方文档 4.7.1. Default Argument Values¶ The default values are evaluated at the point o ...
- python数组取值_python数组,字典的一些操作
新手刚刚开始学习python,如果有写错或写的不好的地方,请大家多多指教! 在python中输出当前系统 import sys print(sys.platform) 输出当前在那个目录 import ...
- python方向键键值_python字典键值对的添加和遍历方法
添加键值对 首先定义一个空字典 >>> dic={} 直接对字典中不存在的key进行赋值来添加 >>> dic['name']='zhangsan' >> ...
最新文章
- java dom遍历_JavaScript DOM文档遍历实战
- c# js popup_c#一个popup问题 :Button_Click_send中如何取得textbox1的内容啊
- [深度学习] FM FFM 算法基本原理
- bjd luts_BJD娃娃背后的圈层文化:一个“成品娃”拍出22万元天价!
- 看这玩意复习你还会挂科?《软件工程篇》
- jeecms附件标签用法
- JAVA微信开源项目(jeewx)百度BAE 部署文档
- Spring:自动装配模式
- diff 命令用法--如何打补丁【原创--学习笔记】
- ios FMDB 更新二进制图片数据
- Atitit (Sketch Filter)素描滤镜的实现 图像处理 attilax总结v2
- 最新emoji表情代码大全_由一个 emoji 引发的思考
- 李庄 220kV变电站电气部分初步设计
- LOJ10102旅游航道
- 九爷带你玩转 php单元测试
- linux配置SVN,添加用户,配置用户组的各个权限教程
- 用虚拟信用卡支付的时候经常出现交易失败、无法付款?一篇文章帮你解决这些问题
- 抽象类可以只实现接口的一部分方法
- 第105篇 Compound 中的 Comptroller
- SiTime硅晶振和石英晶振的冲击和振动性能比较