你不能低估的Python数据结构Namedtuple(一)

python基础学习--字典 01字典定义 字典是用来描述物体的,用来存储多个信息(无序) 和我们熟悉的字典一样,不关心信息的先后顺序,只关心快速选择。 格式: 字典名(变量)={“键1”:“值1”,“键2“:"值2“。。。。} 键必须唯一(页码)且数据类型只能为元组,变量,字符串 02字典的增删改查 字典的取值 格式:字典名【需要索引的键】 name_dict={"name":"小明", "phone"... 阅读详情

本文将讨论python中namedtuple的重点用法。我们将由浅入深的介绍namedtuple的各概念。您将了解为什么要使用它们,以及如何使用它们,从而使代码更简洁。在学习本指南之后,你一定会喜欢上使用它。

学习目标

在本教程结束时,您应该能够:

  • 了解为什么以及何时使用它
  • 将常规元组和字典转换为Namedtuple
  • 将Namedtuple转化为字典或常规元组
  • 对Namedtuple列表进行排序
  • 了解Namedtuple和数据类(DataClass)之间的区别
  • 使用可选字段创建Namedtuple
  • 将Namedtuple序列化为JSON
  • 添加文档字符串(docstring)

如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python裙,裙号930900780,领取python学习资料,会节约很多时间,减少很多遇到的难题。

为什么要使用namedtuple?

namedtuple是一个非常有趣(也被低估了)的数据结构。我们可以轻松找到严重依赖常规元组和字典来存储数据的Python代码。我并不是说,这样不好,只是有时候他们常常被滥用,且听我慢慢道来。

假设你有一个将字符串转换为颜色的函数。颜色必须在4维空间RGBA中表示。

def convert_string_to_color(desc: str, alpha: float = 0.0):
    if desc == "green":
        return 50, 205, 50, alpha
    elif desc == "blue":
        return 0, 0, 255, alpha
    else:
        return 0, 0, 0, alpha
复制代码

然后,我们可以像这样使用它:

r, g, b, a = convert_string_to_color(desc="blue", alpha=1.0)
复制代码

好的,可以。但是我们这里有几个问题。第一个是,无法确保返回值的顺序。也就是说,没有什么可以阻止其他开发者这样调用

convert_string_to_color:
g, b, r, a = convert_string_to_color(desc="blue", alpha=1.0)
复制代码

另外,我们可能不知道该函数返回4个值,可能会这样调用该函数:

r, g, b = convert_string_to_color(desc="blue", alpha=1.0)
复制代码

于是,因为返回值不够,抛出ValueError错误,调用失败。

确实如此。但是,你可能会问,为什么不使用字典呢?

Python的字典是一种非常通用的数据结构。它们是一种存储多个值的简便方法。但是,字典并非没有缺点。由于其灵活性,字典很容易被滥用。让 我们看看使用字典之后的例子。

def convert_string_to_color(desc: str, alpha: float = 0.0):
    if desc == "green":
        return {"r": 50, "g": 205, "b": 50, "alpha": alpha}
    elif desc == "blue":
        return {"r": 0, "g": 0, "b": 255, "alpha": alpha}
    else:
        return {"r": 0, "g": 0, "b": 0, "alpha": alpha}
复制代码

好的,我们现在可以像这样使用它,期望只返回一个值:

color = convert_string_to_color(desc="blue", alpha=1.0)
复制代码

无需记住顺序,但它至少有两个缺点。第一个是我们必须跟踪密钥的名称。如果我们将其更改{"r": 0, “g”: 0, “b”: 0, “alpha”: alpha}为{”red": 0, “green”: 0, “blue”: 0, “a”: alpha},则在访问字段时会得到KeyError返回,因为键r,g,b和alpha不再存在。

字典的第二个问题是它们不可散列。这意味着我们无法将它们存储在set或其他字典中。假设我们要跟踪特定图像有多少种颜色。如果我们使用collections.Counter计数,我们将得到TypeError: unhashable type: ‘dict’。

而且,字典是可变的,因此我们可以根据需要添加任意数量的新键。相信我,这是一些很难发现的令人讨厌的错误点。

好的,很好。那么现在怎么办?我可以用什么代替呢?

namedtuple!对,就是它!

将我们的函数转换为使用namedtuple:

from collections import namedtuple
...
Color = namedtuple("Color", "r g b alpha")
...
def convert_string_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)

复制代码

与dict的情况一样,我们可以将值分配给单个变量并根据需要使用。无需记住顺序。而且,如果你使用的是诸如PyCharm和VSCode之类的IDE ,还可以自动提示补全。

 

color = convert_string_to_color(desc="blue", alpha=1.0)
...
has_alpha = color.alpha > 0.0
...
is_black = color.r == 0 and color.g == 0 and color.b == 0
复制代码

最重要的是namedtuple是不可变的。如果团队中的另一位开发人员认为在运行时添加新字段是个好主意,则该程序将报错。

>>> blue = Color(r=0, g=0, b=255, alpha=1.0)

>>> blue.e = 0
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-13-8c7f9b29c633> in <module>
----> 1 blue.e = 0

AttributeError: 'Color' object has no attribute 'e'
复制代码

不仅如此,现在我们可以使用它Counter来跟踪一个集合有多少种颜色。

>>> Counter([blue, blue])
>>> Counter({Color(r=0, g=0, b=255, alpha=1.0): 2})
复制代码

如何将常规元组或字典转换为 namedtuple

现在我们了解了为什么使用namedtuple,现在该学习如何将常规元组和字典转换为namedtuple了。假设由于某种原因,你有包含彩色RGBA值的字典实例。如果要将其转换为Color namedtuple,则可以按以下步骤进行:

>>> c = {"r": 50, "g": 205, "b": 50, "alpha": alpha}
>>> Color(**c)
>>> Color(r=50, g=205, b=50, alpha=0)
复制代码

我们可以利用该**结构将包解压缩dict为namedtuple。

如果我想从dict创建一个namedtupe,如何做?

没问题,下面这样做就可以了:

>>> c = {"r": 50, "g": 205, "b": 50, "alpha": alpha}
>>> Color = namedtuple("Color", c)
>>> Color(**c)
Color(r=50, g=205, b=50, alpha=0)
复制代码

通过将dict实例传递给namedtuple工厂函数,它将为你创建字段。然后,Color像上边的例子一样解压字典c,创建新实例。

如何将 namedtuple 转换为字典或常规元组

我们刚刚学习了如何将转换namedtuple为dict。反过来呢?我们又如何将其转换为字典实例?

实验证明,namedtuple它带有一种称为的方法._asdict()。因此,转换它就像调用方法一样简单。

>>> blue = Color(r=0, g=0, b=255, alpha=1.0)
>>> blue._asdict()
{'r': 0, 'g': 0, 'b': 255, 'alpha': 1.0}
复制代码

您可能想知道为什么该方法以_开头。这是与Python的常规规范不一致的一个地方。通常,_代表私有方法或属性。但是,namedtuple为了避免命名冲突将它们添加到了公共方法中。除了_asdict,还有_replace,_fields和_field_defaults。您可以在这里找到所有这些。

要将namedtupe转换为常规元组,只需将其传递给tuple构造函数即可。

>>> tuple(Color(r=50, g=205, b=50, alpha=0.1))
(50, 205, 50, 0.1)
复制代码

如何对namedtuples列表进行排序

另一个常见的用例是将多个namedtuple实例存储在列表中,并根据某些条件对它们进行排序。例如,假设我们有一个颜色列表,我们需要按alpha强度对其进行排序。

幸运的是,Python允许使用非常Python化的方式来执行此操作。我们可以使用operator.attrgetter运算符。根据文档,attrgetter“返回从其操作数获取attr的可调用对象”。简单来说就是,我们可以通过该运算符,来获取传递给sorted函数排序的字段。例:

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)
]
...
>>> sorted(colors, key=attrgetter("alpha"))
[Color(r=50, g=205, b=50, alpha=0.1),
 Color(r=50, g=0, b=0, alpha=0.3),
 Color(r=50, g=205, b=50, alpha=0.5)]
复制代码

现在,颜色列表按alpha强度升序排列!

如何将namedtuples序列化为JSON

有时你可能需要将储存namedtuple转为JSON。Python的字典可以通过json模块转换为JSON。那么我们可以使用_asdict方法将元组转换为字典,然后接下来就和字典一样了。例如:

>>> blue = Color(r=0, g=0, b=255, alpha=1.0)
>>> import json
>>> json.dumps(blue._asdict())
'{"r": 0, "g": 0, "b": 255, "alpha": 1.0}'
复制代码

如何给namedtuple添加docstring

在Python中,我们可以使用纯字符串来记录方法,类和模块。然后,此字符串可作为名为的特殊属性使用__doc__。话虽这么说,我们如何向我们的Color namedtuple添加docstring的?

我们可以通过两种方式做到这一点。第一个(比较麻烦)是使用包装器扩展元组。这样,我们便可以docstring在此包装器中定义。例如,请考虑以下代码片段:

_Color = namedtuple("Color", "r g b alpha")

class Color(_Color):
    """A namedtuple that represents a color.
    It has 4 fields:
    r - red
    g - green
    b - blue
    alpha - the alpha channel
    """

>>> print(Color.__doc__)
A namedtuple that represents a color.
    It has 4 fields:
    r - red
    g - green
    b - blue
    alpha - the alpha channel
>>> help(Color)
Help on class Color in module __main__:

class Color(Color)
 |  Color(r, g, b, alpha)
 |  
 |  A namedtuple that represents a color.
 |  It has 4 fields:
 |  r - red
 |  g - green
 |  b - blue
 |  alpha - the alpha channel
 |  
 |  Method resolution order:
 |      Color
 |      Color
 |      builtins.tuple
 |      builtins.object
 |  
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
复制代码

如上,通过继承_Color元组,我们为namedtupe添加了一个__doc__属性。

添加的第二种方法,直接设置__doc__属性。这种方法不需要扩展元组。

>>> Color.__doc__ = """A namedtuple that represents a color.
    It has 4 fields:
    r - red
    g - green
    b - blue
    alpha - the alpha channel
    """
复制代码

注意,这些方法仅适用于Python 3+。

限于篇幅,先到这下篇继续。

最后多说一句,小编是一名python开发工程师,这里有我自己整理的一套最新的python系统学习教程。想要这些资料的可以进q裙930900780领取。

 

本文章素材来源于网络,如有侵权请联系删除。

Python数据结构:被低估的Namedtuple Namedtuple是Python中一个被低估的数据结构,它提供了一种简洁而强大的方式来创建轻量级的数据对象。Namedtuple可以被认为是一个带有命名字段的不可变的元组,它结合了元组和字典的优点,既具有元组的高效性能,又具备字典的可读性和可访问性。总结起来,Namedtuple是一个被低估的Python数据结构,它提供了一种简洁而强大的方式来创建具有命名字段的轻量级数据对象。我们需要指定一个名称和字段的列表。正如你所看到的,我们可以通过字段名称直接访问Namedtuple中的值,而不需要使用索引。 阅读详情

相关推荐

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

python 数组列表字符串str list array tuple的互换以及join函数的使用

1)str与list互换 list=list(str) str=”.join(list) #单引号之间没有空格 &gt;&gt;&gt; str='I am 3 years old' #定义一个名为str的字符串 &gt;&gt;&gt; str 'I am 3 years old' &gt;&gt;&gt; type(str) #查看str的类型 cl

Mr_Cat123的博客 3871

Geneformer实战指南:基于Hugging Face Transformers的基因序列分类模型解析

本文详细解析了基于Hugging Face Transformers的Geneformer模型在基因序列分类任务中的应用。通过介绍模型架构、数据处理流程和实战案例,帮助生物信息学研究者掌握这一前沿技术,实现高效的基因表达数据分析与分类。

weixin_28224217的博客 583

Python中的dict字典的用法

Python中的字典特点: 速度快,内部使用二分查找的方式 可以用来存储大量的关系型数据 字典是无序的 字典的定义方式: 1.dic = dict(name =”zhangsan”, age = 19) 2.dic1 = dict(((“name”, “zhangsan”), (“age”, 19))) 3.dic2 = {“name”:”laowang”, “age”...

python学习者的博客 775

ArcGIS投影变换实战:从WGS_1984到Krasovsky_1940_Albers的精准转换

本文详细解析了在ArcGIS中如何将WGS_1984地理坐标系下的数据精准转换至Krasovsky_1940_Albers投影坐标系。文章通过实战案例,重点阐述了地理坐标系与投影坐标系的区别,并逐步演示了创建自定义地理变换、使用投影栅格工具以及进行批量处理和结果验证的核心操作流程,旨在解决地图数据叠加不准的常见问题。

weixin_29251131的博客 468

从Applied Intelligence被拒到The Visual Computer录用:我的计算机视觉论文投稿时间线全记录(含详细修改意见)

本文详细记录了作者从Applied Intelligence被拒到The Visual Computer成功发表计算机视觉论文的全过程,重点分享了如何将模糊的拒稿理由转化为具体改进方案。文章包含技术改进细节、写作调整策略以及期刊选择经验,为计算机视觉领域的研究者提供了实用的投稿指南。

weixin_30872499的博客 468

python之字典(dict)详细介绍

python之字典详细介绍1. 基本介绍1.1 定义1.2 特征2. 字典用法2.1 字典创建8种方法2.2 字典基本方法2.3 字典常用方法2.3.1 清空key-value方法.clear()2.3.2 获取字典中值的方法.get()2.3.3 更新字典中key-value的方法.update()2.3.4 分别获取字典中的item、key、value的方法.items()、.keys()、....

Claire_chen_jia的博客 1923

STM32F103上跑mbedtls 2.24.0:手把手教你为MQTTS加密通信打好基础

本文详细介绍了如何在STM32F103上移植和裁剪mbedtls 2.24.0,为MQTTS加密通信打下坚实基础。通过版本选择、开发环境配置、深度裁剪策略和加密功能验证,帮助开发者在资源受限的MCU上实现安全通信。文章还提供了常见问题解决方案和性能优化技巧,助力物联网设备开发。

weixin_30321709的博客 462

python中的namedtuple学习

namedtupe(具名元组)是tuple(元组)的一种变形,却具有其特殊的性质。 可将namedtuple看成一种定义类的数据结构,与class类似,但这种数据结构的类只有类成员,没有类方法。 下面来看具体的使用: from collections import namedtuple # City = namedtuple('City', ['name', 'country', 'popula...

Stoneplay 283

机器学习: 共轭梯度算法(PCG)

今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法。我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法。 我们先从一种特殊的线性方程组的定义开始,比如我们需要解如下的线性方程组: Ax=bAx=b 这里的 A(n×n)A(n×n) 是对称,正定矩阵, b(n×...

weixin_30807677的博客 3181

【AI】在RK3576上,使用RKNN实现MeloTTS(文本转语音)

在瑞芯微的RK3576上实现TTS(文本转语音)功能,使用CPU实现时,几乎把CPU资源全部耗尽,没有实用价值。通过将MeloTTS转为onnx,再转为RKNN,来使用RK3576的NPU硬件加速,成功实现TTS。

郭老二 567

python class namedtuple 效率_你不能低估的Python数据结构Namedtuple(一)

本文将讨论python中namedtuple的重点用法。我们将由浅入深的介绍namedtuple的各概念。您将了解为什么要使用它们,以及如何使用它们,从而使代码更简洁。在学习本指南之后,你一定会喜欢上使用它。学习目标在本教程结束时,您应该能够:了解为什么以及何时使用它将常规元组和字典转换为Namedtuple将Namedtuple转化为字典或常规元组对Namedtuple列表进行排序了解Named...

weixin_39792686的博客 101

2025.06.18【转录组】|Ribo-seq/small RNA数据分析:rRNA和smRNA比对率统计全流程

本文介绍了一种自动化统计rRNA/smRNA比对率的方法,用于评估Ribo-seq或small RNA测序数据的质量。主要内容包括:分析原理(比对率定义、参考序列来源)、实践流程(构建索引、比对统计)以及结果可视化方法。通过Python和R脚本实现自动化处理,可生成汇总表格和柱状图。比对率结果能反映样品污染程度,建议控制在20%以下。该流程有助于快速评估测序质量,为后续分析提供可靠依据。文中还提供了常见问题解决方案和脚本示例,适用于生物信息学标准化质控环节。

1619

python中could not convert string to float_你不能低估的Python数据结构Namedtuple(一)

本文将讨论python中namedtuple的重点用法。我们将由浅入深的介绍namedtuple的各概念。您将了解为什么要使用它们,以及如何使用它们,从而使代码更简洁。在学习本指南之后,你一定会喜欢上使用它。学习目标在本教程结束时,您应该能够:了解为什么以及何时使用它将常规元组和字典转换为Namedtuple将Namedtuple转化为字典或常规元组对Namedtuple列表进行排序了解Named...

weixin_39656686的博客 387

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

你不能低估的Python数据结构Namedtuple(二)

上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续。 namedtuples和数据类(Data Class)之间有什么区别? 功能 在Python 3.7之前,可使用以下任一方法创建一个简单的数据容器: namedtuple 常规类 第三方库,attrs 如果您想使用常规类,那意味着您将必须实现几个方法。例如,常规类将需要一种__init__方法来在类实例化期间设置属性。如果您希望该类是可哈希的,则意味着自己实现一个__hash__方法

python_miao的博客 380

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python数据结构(一):被低估的Namedtuple

Python教程栏目为大家介绍Python数据结构中的Namedtuple。 本文将讨论python中namedtuple的重点用法。我们将由浅入深的介绍namedtuple的各概念。您将了解为什么要使用它们,以及如何使用它们,从而是代码更简洁。在学习本指南之后,你一定会喜欢上使用它。 学习目标 在本教程结束时,您应该能够: 了解为什么以及何时使用它 将常规元组和字典转换为Namedtuple 将Namedtuple转化为字典或常规元组 对Namedtuple列表进行排序 了解Namedtuple和数据类

Anna_xuan的博客 406

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python3 namedtuple_你不能低估的Python数据结构Namedtuple(二)

上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续。namedtuples和数据类(Data Class)之间有什么区别?功能在Python 3.7之前,可使用以下任一方法创建一个简单的数据容器:namedtuple常规类第三方库,attrs如果您想使用常规类,那意味着您将必须实现几个方法。例如,常规类将需要一种__init__方法来在类...

weixin_39746282的博客 107

python class namedtuple 效率_你不能低估的Python数据结构Namedtuple(二)

上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续。namedtuples和数据类(Data Class)之间有什么区别?功能在Python 3.7之前,可使用以下任一方法创建一个简单的数据容器:namedtuple常规类第三方库,attrs如果您想使用常规类,那意味着您将必须实现几个方法。例如,常规类将需要一种__init__方法来在类...

weixin_39750190的博客 227

python class namedtuple 效率_Python数据结构:一个被低估的Namedtuple(一)

Python教程栏目为大家介绍Python数据结构中的Namedtuple。本文将讨论python中namedtuple的重点用法。我们将由浅入深的介绍namedtuple的各概念。您将了解为什么要使用它们,以及如何使用它们,从而是代码更简洁。在学习本指南之后,你一定会喜欢上使用它。学习目标在本教程结束时,您应该能够:了解为什么以及何时使用它将常规元组和字典转换为Namedtuple将Namedt...

weixin_30096321的博客 190

Python数据结构(二):被低估的Namedtuple

python视频教程栏目继续带大家了解Python数据结构的Namedtuple。 上篇Python数据结构:一个被低估的Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续。 namedtuples和数据类(Data Class)之间有什么区别? 功能 在Python 3.7之前,可使用以下任一方法创建一个简单的数据容器: namedtuple 常规类 第三方库,attrs 如果您想使用常规类,那意味着您将必须实现几个方法。例如,常规类将需要一种__init__方法来在类实例化期间设

Anna_xuan的博客 231

pythonnamedtuple定义类型_你不能低估的Python数据结构Namedtuple(二)

上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续。namedtuples和数据类(Data Class)之间有什么区别?功能在Python 3.7之前,可使用以下任一方法创建一个简单的数据容器:namedtuple常规类第三方库,attrs如果您想使用常规类,那意味着您将必须实现几个方法。例如,常规类将需要一种__init__方法来在类...

weixin_39997695的博客 142

pythonnamedtuple定义类型_一个被低估的Python数据结构Namedtuple

本文将讨论python中namedtuple的重点用法。我们将由浅入深的介绍namedtuple的各概念。您将了解为什么要使用它们,以及如何使用它们,从而是代码更简洁。在学习本指南之后,你一定会喜欢上使用它。学习目标在本教程结束时,您应该能够:了解为什么以及何时使用它将常规元组和字典转换为Namedtuple将Namedtuple转化为字典或常规元组对Namedtuple列表进行排序了解Named...

weixin_39652646的博客 201

python三大数据结构-一个被低估的Python数据结构Namedtuple

本文将讨论python中namedtuple的重点用法。我们将由浅入深的介绍namedtuple的各概念。您将了解为什么要使用它们,以及如何使用它们,从而是代码更简洁。在学习本指南之后,你一定会喜欢上使用它。学习目标在本教程结束时,您应该能够:了解为什么以及何时使用它将常规元组和字典转换为Namedtuple将Namedtuple转化为字典或常规元组对Namedtuple列表进行排序了解Named...

weixin_39843698的博客 258

为什么要使用namedtuple?

namedtuple是一个非常有趣(也被低估了)的数据结构。我们可以轻松找到严重依赖常规元组和字典来存储数据的Python代码。我并不是说,这样不好,只是有时候他们常常被滥用,且听我慢慢道来。 假设你有一个将字符串转换为颜色的函数。颜色必须在4维空间RGBA中表示。 def convert_string_to_color(desc: str, alpha: float = 0.0): if desc == "green": return 50, 205, 50, alpha

地推 749
上一篇: 零基础小白必看篇:学习Python入门之面对对象基础
下一篇: 你不能低估的Python数据结构Namedtuple(二)
python阿喵
博客等级 码龄6年 169粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值