当前位置: 首页 > 科技观察

Python编程:命名元组(namedtuple)要点详解

时间:2023-03-12 18:27:37 科技观察

前言本篇继续介绍Python集合模块。这次主要介绍里面的namedtuple,也就是namedtuple的使用。闲话少说,开始吧~记得点赞关注转发哦~^_^创建命名元组Python集合中的命名元组类namedTuples为元组中的每个位置赋予了意义,增强了代码的可读性和描述性。它们可以在任何使用常规元组的地方使用,并添加按名称而不是位置索引访问字段的能力。它来自Python内置模块集合。使用的常规语法为:importcollectionsXxNamedTuple=collections.namedtuple(typename,field_names):如果导入方式不同,如:importcollectionsascAlias、fromcollectionsimportnamedtuple、fromcollectionsimportnamedtupleasNamedTuple等,我们创建的namedtuple子类的形式可以对应:XxNamedTuple=cAlias.namedtuple(...)XxNamedTuple=namedtuple(...)XxNamedTuple=NamedTuple(...)其中:参数typename:为返回的新元组子类XxNamedTuple指定一个字符串类型类名。用于创建类似元组的对象的新子类,这些对象具有可通过属性查找、位置索引和迭代访问的关联字段。子类的实例也有一个有用的文档字符串(相当于帮助文档,带有typename和field_names)和一个有用的__repr__()方法,它以name=value的格式列出元组内容。参数field_names:通常是一个字符串序列,如['x','y']。可选地,field_names也可以是包含由空格和/或逗号分隔的相应字段名称的字符串,例如'xy'或'x,y'。任何有效的Python标识符都可以用作命名字段名称,但不能以下划线(_)开头。有效标识符包括字母、数字和下划线,但不能以数字和下划线开头,不能使用关键字,如class、return、global、pass、raise。要了解NamedTuple的工作原理,假设我们有一个具有id、name和age属性的Employee对象。请看代码示例列表:程序运行输出类似如下:Employee(id='111',name='SoloCui',age='18')索引访问的员工姓名为:SoloCuiEmployee(id='222',name='AnnieKent',age='26')key(fieldname)访问的Employee的名字是:AnnieKent另外,创建named函数中的其他参数元组用的比较少,这里只做简单介绍:参数rename:如果rename为true,无效的字段名会自动替换为位置名。例如['abc','def','ghi','abc']转换为['abc','_1','ghi','_3'],去掉关键字def和重复的字段名abc.参数默认值:可以是None或默认值的可迭代对象。由于具有默认值的字段必须出现在任何没有默认值的字段之后,因此默认值应用于最右边的参数,顺序是左边。比如字段名是['x','y','z'],默认值为(1,2),那么x会是必填参数,y会默认为1,z会默认到2.参数模块:如果定义了模块,则命名元组的__module__属性设置为该值。命名元组实例不为每个实例使用单独的字典,因此它们是轻量级的,不需要比常规元组更多的内存。命名元组特定方法除了从元组继承的方法外,命名元组还支持三个附加方法和两个属性。为了防止与字段名称冲突,方法和属性名称以下划线开头。介绍如下:1)_make(iterable):类方法,从现有序列或可迭代对象生成新实例。代码示例如下:输出类似如下:Employee(id='333',name='Batman',age='28')2)_asdict():返回一个新字典,映射字段名到相应的值。示例代码如下:输出结果类似如下:{'id':'333','name':'Batman','age':'28'}3)_replace(**kwargs):返回一个新的命名元组实例,用新值替换指定的字段。代码示例如下:输出结果如下:Employee(id='777',name='Batman',age='34')4)_fields:以字符串元组的形式列出字段名称。对于自省和从现有命名元组创建新的命名元组类型很有用。示例代码如下:输出结果为:('id','name','age')我们可以使用_fields属性从现有的命名元组中创建一个新的命名元组。示例如下:输出结果类似如下:Pixel(x=5,y=8,red=128,green=255,blue=0)结果的实体赋值这里说的实体类似Java中的数据实体对象——只有简单的属性字段。命名元组在将csv或sqlite3模块操作返回的元组结果赋值给对应的字段名组装成一个简单的实体,自动进行字段对应的赋值时特别有用。比如当前Python程序所在位置有一个employees.csv,里面有如下内容:张三,26岁,工程师,开发部,中级李斯,32岁,项目部项目经理,高级通过这个例子,我们来完成Employee实体的命名元组的自动组装,代码示例如下:输出结果类似如下:张三工程师26开发部中层李四项目经理32项目部高级另一个简单的例子数据库操作和组装实体,代码清单如下:我只是简单地创建一个数据库并创建一个表,然后插入一条数据,然后查询并完成命名元组的实体组装和结果输出。运行输出如下:王武经理本文小结本文主要介绍命名元组(namedtuple)在Python内置的集合模块中的使用,即可以作为一个通用的元组使用,而可以根据字段名访问元组值,介绍命名元组内部扩展的几种方法和应用实例。最后还介绍了基于命名元组的物化包的应用。介绍以代码示例为主,方便您练习,更好地掌握和理解。