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

一、为什么要使用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相关推荐

  1. Python函数默认值参数的2个坑

    在定义函数时,Python支持默认值参数,在定义函数时可以为形参设置默认值.在调用带有默认值参数的函数时,可以不用为设置了默认值的形参进行传值,此时函数将会直接使用函数定义时设置的默认值,当然也可以通 ...

  2. python参数默认值实例_Python中使用partial改变方法默认参数实例

    #!/usr/bin/env python # -*- coding: utf-8 -*- #python2.7x #partial.py #authror: orangleliu ''' funct ...

  3. python中的def函数括号里的默认值_Python中的默认参数值

    Python对默认参数值的处理方法是少有的几个易使大多数新手Python程序员犯错的地方之一.(通常只犯一次) 导致困惑的地方是当你使用"可变"对象作为(参数的)默认值时的(程序) ...

  4. python tkinter entry默认值_Python ---(六)Tkinter窗口组件:Entry

    The Tkinter Entry Widget ##简介 Entry(输入框)组件通常用于获取用户的输入文本. ##何时使用 Entry 组件? Entry 组件仅允许用于输入一行文本,如果用于输入 ...

  5. python return返回值_Python return语句 函数返回值

    return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...

  6. python函数默认参数_Python中函数的默认参数问题

    前几天,运营反馈了一个BUG,某些数据在写入数据库后,其时间字段出现异常,与当前时间相差较多. 由于代码是不是我写的,所以开始一遍阅读代码一遍排查问题. 在主流程中,仅仅发现了一个对时间赋值的语句,并 ...

  7. python参数默认值

    官方文档很详细啊! python官方文档 4.7.1. Default Argument Values¶ The default values are evaluated at the point o ...

  8. python数组取值_python数组,字典的一些操作

    新手刚刚开始学习python,如果有写错或写的不好的地方,请大家多多指教! 在python中输出当前系统 import sys print(sys.platform) 输出当前在那个目录 import ...

  9. python方向键键值_python字典键值对的添加和遍历方法

    添加键值对 首先定义一个空字典 >>> dic={} 直接对字典中不存在的key进行赋值来添加 >>> dic['name']='zhangsan' >> ...

最新文章

  1. java dom遍历_JavaScript DOM文档遍历实战
  2. c# js popup_c#一个popup问题 :Button_Click_send中如何取得textbox1的内容啊
  3. [深度学习] FM FFM 算法基本原理
  4. bjd luts_BJD娃娃背后的圈层文化:一个“成品娃”拍出22万元天价!
  5. 看这玩意复习你还会挂科?《软件工程篇》
  6. jeecms附件标签用法
  7. JAVA微信开源项目(jeewx)百度BAE 部署文档
  8. Spring:自动装配模式
  9. diff 命令用法--如何打补丁【原创--学习笔记】
  10. ios FMDB 更新二进制图片数据
  11. Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结v2
  12. 最新emoji表情代码大全_由一个 emoji 引发的思考
  13. 李庄 220kV变电站电气部分初步设计
  14. LOJ10102旅游航道
  15. 九爷带你玩转 php单元测试
  16. linux配置SVN,添加用户,配置用户组的各个权限教程
  17. 用虚拟信用卡支付的时候经常出现交易失败、无法付款?一篇文章帮你解决这些问题
  18. 抽象类可以只实现接口的一部分方法
  19. 第105篇 Compound 中的 Comptroller
  20. SiTime硅晶振和石英晶振的冲击和振动性能比较

热门文章

  1. 数据库版本管理工具 -- Flyway
  2. 详解:海盗分赃(25 分)
  3. one-hot表示和分布式表示
  4. 解决页面刷新数据丢失,数据持久化问题
  5. 【软件工程】交付和维护
  6. Windows下及linux下PVM并行计算平台的搭建
  7. Unity3d 周分享(13期 2019.3.23 )
  8. java程序员如何进行物联网开发
  9. kf 和 ekf 和 ukf 入门
  10. java 线程锁Lock