python之具名元组

具名元组的定义

Python标准库collections中定义了具名元组(namedtuple)工厂函数,它可以构建带字段名的元组。

工厂函数参数详解

变量名 = namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)

namedtuple工厂函数的参数详解:

typename:定义具名元组的名称,字符串型。

field_names:定义具名元组的字段名。该参数可以使用2种格式:

  • 内部元素都是字符串的列表或元组;

    例如['商品','单价',’数量']或('商品','单价',’数量')

  • 以英文逗号','分隔的长字符串。字段名必须符合以下规则:

    例如'商品,单价,数量'

字段名命名规则:

  • 不能与关键字重名
  • 不能以下划线开头
  • 以字母(包括汉字)开头,由字母、数字、下划线组成。

rename:默认是False,意思是必须指定字段名。若为True,系统会对缺省的、重复的字段名自动重命名为'_索引值'。

defaults:设置默认值,可以是列表、元组,当字段数量大于defaults的元素数量时,后面的字段获得缺省值。

例如字段名有'a','b','c'这3个,缺省值给了'1','2'两个缺省值时,'b'=1,'c'=2。

module:设置所属模块,默认是'__main__'。

读取文件到具名元组

具名元组使用案例如下:

from collections import namedtuple


def file_to_list(file):
    with open(file, encoding='utf8') as f:
        # 创建具名元组构造器,具名元组名称是goods,字段名源自文件首行(除去头尾空白符)
        # 具名元组构造器的变量名是goods。
        goods = namedtuple('goods', f.readline().strip())
        fruit_list = []
        for line in f:
            if len(line) < 3:  # 过滤空行及数据不完整的行。
                continue
            # 读取一行文件内容,去除头尾空白符,以','分割成列表
            # 用*打散列表,将列表中的元素分别作为参数传入goods具名元组构造器
            line = goods(*(line.strip().split(',')))
            fruit_list.append(line)
    return fruit_list


l1 = file_to_list('list.txt')
print(l1[0])
print(l1[0].商品, l1[1].单价, l1[1].数量)
print(l1[1][0], l1[1][1], l1[1][2])
print(l1[2][0], l1[1][1:3])


out:
goods(商品='苹果', 单价='4.8', 数量='5')
苹果 2.9 10
雪梨 2.9 10
大枣 ('2.9', '10')

通过以上案例可以了解怎么创造具名元组构造器,怎么用具名元组构造器创建具名元组。

具名元组的优点

具名元组有以下几个优点:

  1. 具名元组是元组的子类,继承了元组的所有特性,也就是说具名元组可以用所有元组可用的方法和属性。
  2. 具名元组和元组存储数据消耗的内存是一样的,与字典相比大大节省空间。
  3. 具名元组可以用字段名访问数据,大大提高代码的可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值