Python 之 namedtuple 具名元组

这里介绍Python的namedtuple具名元组

Python 之 namedtuple 具名元组
abstract.png

实践

namedtuple是collections模块中的一个工厂函数,使用此函数可以创建一个相应字段名的元组子类。换言之,其构建了一个具有字段名的元组和一个有名字的类。故当你准备设计一个类时,其只有属性而没有方法。仅保存数据,并不进行修改。那么可以使用具名元组来代替这个类

这里我们创建一个名为 StuInfo 的具名元组子类。将该类对象赋值给一个名为StuInfo的变量。对于指向该类对象的变量而言,习惯上我们将该变量名称和类的名称保持一致

import collections

print("-------------------------- 具名元组 ------------------------")

# typename参数: 具名元组子类的类名
# field_names参数:具名元组子类的字段名。通常使用序列进行指定
StuInfo = collections.namedtuple("StuInfo", ["name","age","sex"])
# 输出为<class 'type'>,说明StuInfo变量指向的是一个类
print("StuInfo变量的类型:",type(StuInfo))

# 创建StuInfo对象
stu1 = StuInfo("Aaron"18"man")
# 输出为<class '__main__.StuInfo'>,说明stu1变量的类型是StuInfo类
print("stu1变量的类型:",type(stu1))

# 创建StuInfo对象
stu2 = StuInfo("Bob",35"woman")

print("stu1:",stu1)
print("stu2:",stu2)

# 通过索引访问
print("stu1[0]:", stu1[0],"stu1[1]:", stu1[1],"stu1[2]:",stu1[2])

# 通过字段名访问
print("stu2.name:", stu2.name,"stu2.age:", stu2.age,"stu2.sex:",stu2.sex)
Python 之 namedtuple 具名元组
figure 1.png

具名元组同样有元组的不可变性,尝试修改值将引发异常

# 具名元组 同样有元组的不可变性,尝试修改值将引发异常
stu1.age = 23
Python 之 namedtuple 具名元组
figure 2.png

这里再补充下具名元组的其他特性

  • 类属性_fields :返回该类所有字段名构成的元组
  • 类方法_make() :用于创建该类的实例。其接受一个可迭代对象,作为构建实例的参数
  • 实例方法_asdict() :其可以将具名元组转换为字典
import collections

StuInfo = collections.namedtuple("StuInfo", ["name","age","sex"])

# 类属性_fields : 该类所有字段名构成的元组
print(f"类属性 _fields : {StuInfo._fields}")
print("------------------------------------------------------------")

# 类方法_make(): 创建该类的实例。其接受一个可迭代对象,作为构建实例的参数
stu3 = StuInfo._make( ("Tony"23"male") )
stu4 = StuInfo._make( ["Tom"47"female"] )
stu5 = StuInfo._make( {"David"67"female"} )
print("stu3:",stu3)
print("stu4:",stu4)
print("stu5:",stu5)
print("------------------------------------------------------------")

# 实例方法_asdict(): 将具名元组转换为字典
stu_dict = stu5._asdict() 
print(f"stu_dict type: {type(stu_dict)}")
print(f"stu_dict type: {stu_dict}")
Python 之 namedtuple 具名元组
figure 3.png

参考文献

  1. Python编程·第3版:从入门到实践 Eric Matthes著
  2. Python基础教程·第3版 Magnus Lie Hetland著
  3. 流畅的Python·第1版 Luciano Ramalho著

原文始发于微信公众号(青灯抽丝):Python 之 namedtuple 具名元组

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/285857.html

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!