collections.namedtuple用于构造带字段名的元组。对应类型为typing.NamedTuple(可用作超类)。
具名元组
namedtuple对象的定义:
collections.namedtuple(typename, field_names, verbose=False, rename=False, defaults=None, module=None):
typename:元组名称
field_names:是字段序列(如,[‘x’, ‘y’]);
rename:为true时,字段名无效时(如,重名或使用关键字)会被自动替换为位置名(如,_1);
defaults:字段的默认值,若为iterable对象,则依次对应field_names中字段的缺省值;
1 2 3 4 5 6 7 8 9 10 11 |
|
从可迭代对象(Iterable)构造具名元组:
1 2 3 4 |
|
元组操作
具名元组修改:不能直接修改里面的值,可通过_replace构造一个新的:
1 2 |
|
把字典转换为具名元组:
1 2 |
|
具名元组转换为字典(通过_asdict方法):
1 2 |
|
具名元组转换为元组:
1 2 |
|
属性
属性_fields包含所有字段的元组:如('r', 'g', 'b', 'alpha');
属性__annotations__包含字段与对应类型的字典:如{'r': <class 'float'>, 'g': <class 'float'>, 'b': <class 'float'>, 'alpha': <class 'float'>};
属性_field_defaults保证有初始值的字段与初始值的字典:如{'alpha': 0.0};
排序
具名元组排序:通过operator库中的attrgetter可指定排序字段:
1 2 3 4 5 6 7 8 9 |
|
与字典比较
字典dict是一种非常通用的数据结构,很容易被滥用,同时相对namedtuple,有以下问题:
字典是不可散列,因此无法将其存储在set或其他字典中;
字典是可变的,可以根据需要添加任意数量的新键;
与dict类似,在namedtuple中可以将值分配给单个变量并根据需要使用。但:
namedtuple是不可变的,不会意外添加新的值(键);
数据类
数据类详情可参见《数据类(dataclass)简介》。
dataclass修饰
python3.7中引入了数据类(Data Class),可看做是“具有默认值的可变namedtuple”:
可方便地添加doc;
可定义可选字段;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
继承NamedTuple
通过继承NamedTuple也可方便定义(同时可定义字段的初始值,有初始值的字段必须在无初始字段后面):
1 2 3 4 5 6 7 8 9 10 |
|
以上就是python具名元组如何使用的详细内容
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。