Python 官方文档:入门教程 => 点击学习
目录具名元组元组操作属性排序与字典比较数据类dataclass修饰继承NamedTuplecollections.namedtuple用于构造带字段名的元组。对应类型为typing.
collections.namedtuple用于构造带字段名的元组。对应类型为typing.NamedTuple(可用作超类)。
namedtuple对象的定义:
collections.namedtuple(typename, field_names, verbose=False, rename=False, defaults=None, module=None):
from collections import namedtuple
Color = namedtuple("Color", "r g b alpha")
def convert_to_color(desc: str, alpha: float = 0.0):
if desc == "green":
return Color(r=50, g=205, b=50, alpha=alpha)
elif desc == "blue":
return Color(r=50, g=0, b=255, alpha=alpha)
else:
return Color(r=50, g=0, b=0, alpha=alpha)
从可迭代对象(Iterable)构造具名元组:
c = Color._make([10, 20, 30, 0.1])
nc = Color._make((10, 20, 30, 0.1))
print("r:", c.r)
具名元组修改:不能直接修改里面的值,可通过_replace构造一个新的:
c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
nc = c._replace(r=100)
把字典转换为具名元组:
c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
nc = Color(**c)
具名元组转换为字典(通过_asdict方法):
c = Color(r=50, g=0, b=0, alpha=0.5)
d = c._asdict()
具名元组转换为元组:
c = Color(r=50, g=0, b=0, alpha=0.5)
t = tuple(c)
具名元组排序:通过operator库中的attrgetter可指定排序字段:
from operator import attrgetter
colors = [
Color(r=50, g=205, b=50, alpha=0.1),
Color(r=50, g=205, b=50, alpha=0.5),
Color(r=50, g=0, b=0, alpha=0.3)
]
out = sorted(colors, key=attrgetter("alpha"))
print(out)
字典dict是一种非常通用的数据结构,很容易被滥用,同时相对namedtuple,有以下问题:
与dict类似,在namedtuple中可以将值分配给单个变量并根据需要使用。但:
namedtuple是不可变的,不会意外添加新的值(键);
数据类详情可参见《数据类(dataclass)简介》。
python3.7中引入了数据类(Data Class),可看做是“具有默认值的可变namedtuple”:
from dataclasses import dataclass
# frozen设为true后,字段内容将不允许修改(与namedtuple完全类似)
# 否则可修改字段;并可任意添加字段(如,c.n=1);
@dataclass(frozen=True)
class DColor:
"""A regular class that represents a color."""
r: float
g: float
b: float
alpha: float = 0.0
# c = DColor(r=10, g=20, b=30)
c = DColor(10, 20, 30)
通过继承NamedTuple也可方便定义(同时可定义字段的初始值,有初始值的字段必须在无初始字段后面):
from typing import NamedTuple
class NColor(NamedTuple):
"""A namedtuple that represents a color."""
r: float
g: float
b: float
alpha: float = 0.0
nc = NColor(100, 110, 120)
到此这篇关于python具名元组(namedtuple)的具体使用的文章就介绍到这了,更多相关Python具名元组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: python具名元组(namedtuple)的具体使用
本文链接: https://www.lsjlt.com/news/200684.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0