python具名元组如何使用

发布时间:2023-03-21 13:51:44 作者:iii
来源:亿速云 阅读:100

这篇文章主要介绍了python具名元组如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python具名元组如何使用文章都会有所收获,下面我们一起来看看吧。

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)简介》。

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

通过继承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具名元组如何使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python具名元组如何使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 数据分析用python语言有什么好处
  2. Python中web嵌入GUI的方法是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:python人工智能算法之随机森林流程是什么

下一篇:golang怎么去除context的deadline

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》