argparse解析命令行参数

Python | 使用argparse解析命令行参数 今天是Python专题第27篇文章,我们来聊聊Python当中的命令行参数工具argparse。 命令行参数工具是我们非常常用的工具,比如当我们做实验希望调节参数的时候,如果参数都是通过硬编码写在代码当中的话,我们每次修改参数都需要修改对应的代码和逻辑显然这不太方便。比较好的办法就是把必要的参数设置成通过命令行传入的形式,这样我们只需要在运行的时候修改参数就可以了。 sys.argv 解析命令行传入参数最简单的办法就是通过sys.argv,sys.argv可以获取到我们通过命令行传入的参数。 import 阅读详情

argparse简介:

    在argparse中,最常用的就是上述三部分了:创建一个ArgumentParser对象;使用add_argument()方法来为创建的ArgumentParser对象添加argument的解析规则;最后调用parse_args()来解析传入的内容,依据的是第二步制定的规则,生成的是一个Namespace对象,若未传参数给parse_args(),那么默认从sys.argv来获取命令行入参。

创建一个ArgumentParser:

    函数原型为:

 ArgumentParser(prog=None,usage=None,description=None,epilog=None, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None,conflict_handler='error', add_help=True)
    1、prog:程序的名字,默认是argv[0]。若设置,则在帮助信息中,可以使用%(prog)s来作为格式化的引用(修改一处全局受用)。
    2、usage:帮助信息的usage字段,描述程序的各种用法,默认情况下会依据add_argument()来自动生成。
    3、description:一个简单描述程序主要干啥以及怎么用的字符段,默认为空。
    4、epilog:optional arguments字符段之后的字符段,默认为空。
    5、parents:继承的父parser,为了避免一些公共的内容重复定义,父parser在初始化时会设置add_help=False,这是为了防止出现父与子parser的-h冲突而抛出异常。
    6、formatter_class:对于help输出进行格式化,除了输出的样式外,如果设置为ArgumentDefaultsHelpFormatter,则会自动在help输出中添加已定义的default值。
    7、prefix_chars:options前的字符,默认为'-',可以添加其他字符,如'-+',但是如果没有包括'-',那么对应的option如'-h'就无法解析。
    8、fromfile_prefix_chars:有时会使用文件给parse_args()传入参数,为了能够识别文件字符串,如"demo.txt",需要设置此值,如"@",那么所有以此字符为开头的字符串都被当作是文件,所以传给parse_args()的参数应该是@demo.txt。在该文件中,一行只能有一个参数。如文件中的'-f\nbar'会被解析成['-f','bar']。
    9、argument_default:一般情况下,默认值使用add_argument()来添加,或者使用set_defaults()设置一些键值对来添加。剩下一种情况就是设置此项(此处没看明白是咋回事)。
    10、conflict_handler:解决在add_argument()阶段有冲突的option的依据策略,默认为error即抛出异常。一般情况下遇到冲突是抛出异常即可,但是如果设置了parents,那么需要重写父parser中的规则的时候,就需要将此项设置为resolve,但是重写是精确匹配的,如老规则定义了-h/--help,重写了-h,那么--help还是老规则。
    11、add_help:是否添加-h/--helpoption,默认为True。为False时,是要做parent(其实可以设置子Parser重写)。默认是-h/--help,若prefix_chars中没有包含'-',那么就以其中第一个字符作为代替。

调用add_argument()添加解析规则:

    函数原型:   

  ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][,metavar][, dest])

  1、name or flags:是位置参数,则需要传入名字;要是可选参数,则需要进行定义,如'-f','--foo'。

  2、action:定义传入的参数如何处理。

    action='store',默认取值,保存传入参数。
    action='store_const',需要添加const,意味着该argument的值不从命令行输入,而是取const的值。
    action='store_true' or action='store_false','store_const'的特殊情形,意味着const的值为True或False。
    action='append',表示传入的值会作为一个列表的一项,意味着option可以在命令行中多次出现。
    action='append_const',传入列表的项由const定义,通常用在需要多个argument将值传入一个列表中的场景。
    action='count',输出argument出现的次数。
    action='help',已默认添加。
    action='version',需要定义version,使用时输出版本信息并退出。
    自定义,通过定义一个argparse.Action子类来实现。实际上,上面的这些可选项都是通过这种形式定义的。    

  3、nargs:ArgumentParser对象通常将一个动作与一个命令行参数关联。nargs关键字参数将一个动作与不同数目的命令行参数关联在一起:

    nargs=N,一个选项后可以跟多个参数(action='append'时,依然是一个选项后跟一个参数,只不过选项可以多次出现),参数的个数必须为N的值,这些参数会生成一个列表,当nargs=1时,会生成一个长度为1的列表。
    nargs=?,如果没有在命令行中出现对应的项,则给对应的项赋值为default。特殊的是,对于可选项,如果命令行中出现了此可选项,但是之后没有跟随赋值参数,则此时给此可选项并不是赋值default的值,而是赋值const的值。
    nargs=*,和N类似,但是没有规定列表长度。
    nargs=+,和*类似,但是给对应的项当没有传入参数时,会报错error: too few arguments。
    nargs=argparse.REMAINDER,所有剩余的参数,均转化为一个列表赋值给此项,通常用此方法来将剩余的参数传入另一个parser进行解析。如果nargs没有定义,则可传入参数的数量由action决定,通常情况下为一个,并且不会生成长度为一的列表。
  4、const,一种是定义action='store_const'或action='append_const'时使用。一种是定义nargs='?'时,可选项出现在命令行中,但之后并没有跟随赋值的参数,作为默认值传给此可选项。
  5、default:默认值。
    如果是一个字符串,那么Parser解析的时候会将它作为命令行传入值,使用type的值来进行转换类型,但是如果不是的话,就会使用定义的值而不进行类型转换。如果设置了nargs='?'或nargs='*',那么当没有参数赋值给该项时,会使用default定义的值。
而default=argparse.SUPPRESS时,则表示命令行中未出现某一项时,不会对它进行默认赋值。
  6、type:用于类型检查和类型转换。
    使用FileType可简化对文件的操作。还可以自定义函数,输入是一个字符串,输出是转换后的字符串。当设置choices的时,类型检查会变得容易,因为只需要在一个范围内比较即可。
  7、choices:给定了取值范围,超出会报错。
    当type也有定义时,会先使用type进行类型检查,所以choices中的取值必须符合type的定义,否则在parse_args()时会报错。任何支持in操作符的均可作为choices的赋值,所以字典,列表,集合,等等其他容器均都支持。
  8、required:默认情况下,可选项(前面有'-')被认为并不一定需要出现在命令行参数中,但是如果设置了required=True的话,则必须出现。此类设置违背人的常识,应避免使用。
  9、help:帮助信息。
    之前提到的%(prog)s可用于此处程序名的格式化,此外,还有%(default)s格式化default的值,%(type)s格式化type的值。
设置为argparse.SUPPRESS可不显示帮助信息。
  10、metavar:在Parser生成帮助信息时,需要有字符代表需要传入的值。(这一段和dest相同,使用的就是dest的值)如果是位置参数,则用它本身代替;如果是可选参数,则使用它的大写来代替。使用metavar可替换默认的字符。
  11、dest:大部分的选项都需要通过命令行来给其赋值,这些值的名字通过dest来定义,默认的规则如同metavar中所述。

调用parse_args()解析

    函数原型:

    ArgumentParser.parse_args(args=None, namespace=None)

    将args转换为namespace对象的一个值。默认情况下,sys.argv赋值给args,一个空的Namespace对象会被创建。解析时,会对传入的参数进行检查,若不符合要求就会报错。一般情况下,会自动判断传入的值到底是一个可选参数,还是一个负数(都用'-'开头)。但有时位置参数的值必须是一个'-'开头的值,如'-f',那么使用parser.parse_args(['--', '-f']),'--'代表后续的所有传入值都需要看做是位置参数。parse_args()会返回填充好的Namespace对象

实例:

以faster rcnn代码中的命令行解析为例:

#coding=utf-8
import argparse
import sys

def parse_args():
  parser = argparse.ArgumentParser(description='Train a Fast R-CNN network')
  parser.add_argument('--cfg', dest='cfg_file',help='optional config file',default=None, type=str)
  parser.add_argument('--weight', dest='weight',help='initialize with pretrained model weights',type=str)
  parser.add_argument('--imdb', dest='imdb_name',help='dataset to train on',default='voc_2007_trainval', type=str)
  parser.add_argument('--imdbval', dest='imdbval_name',help='dataset to validate on',default='voc_2007_test', type=str)
  parser.add_argument('--iters', dest='max_iters',help='number of iterations to train',default=70000, type=int)
  parser.add_argument('--tag', dest='tag',help='tag of the model',default=None, type=str)
  parser.add_argument('--net', dest='net',help='vgg16, res50, res101, res152, mobile',default='res50', type=str)
  parser.add_argument('--set', dest='set_cfgs',help='set config keys', default=None,nargs=argparse.REMAINDER)

  if len(sys.argv) == 1:
    parser.print_help()
    sys.exit(1)
  args = parser.parse_args()
  return args

if __name__ == '__main__':
  args = parse_args()
  print(args)

将以上代码保存为test.py,然后在命令行输入:python test.py

结果为:

usage: test.py [-h] [--cfg CFG_FILE] [--weight WEIGHT] [--imdb IMDB_NAME]
               [--imdbval IMDBVAL_NAME] [--iters MAX_ITERS] [--tag TAG]
               [--net NET] [--set ...]

Train a Fast R-CNN network

optional arguments:
  -h, --help            show this help message and exit
  --cfg CFG_FILE        optional config file
  --weight WEIGHT       initialize with pretrained model weights
  --imdb IMDB_NAME      dataset to train on
  --imdbval IMDBVAL_NAME
                        dataset to validate on
  --iters MAX_ITERS     number of iterations to train
  --tag TAG             tag of the model
  --net NET             vgg16, res50, res101, res152, mobile
  --set ...             set config keys

在命令行输入:

python test.py --weight data/imagenet_weights/vgg16.ckpt \
      		--imdb voc_2007_trainval  \
      		--imdbval voc_2007_test  \
      		--iters 7000   \
      		--cfg experiments/cfgs/vgg16.yml \
      		--net vgg16            \
      		--set ANCHOR_SCALES "[8,16,32]" ANCHOR_RATIOS "[0.5,1,2]" TRAIN.STEPSIZE "[50000]"

结果为:

Namespace(cfg_file='experiments/cfgs/vgg16.yml',imdb_name='voc_2007_trainval',imdbval_name='voc_2007_test', max_iters=7000, net='vgg16', set_cfgs=['ANCHOR_SCALES', '[8,16,32]', 'ANCHOR_RATIOS', '[0.5,1,2]', 'TRAIN.STEPSIZE', '[50000]'], tag=None, weight='data/imagenet_weights/vgg16.ckpt')

参考:

https://www.jianshu.com/p/820b74a2f113
https://www.cnblogs.com/xiaofeiIDO/p/6154953.html

argparser参数配置模块简介 argparse模块是Python内置的用于命令项选项与参数解析的模块。不仅可在python文件中将算法参数集中放到一起,并且可在命令行/终端进行指定参数修改,非常适合深度学习中超参数的设置与修改。 阅读详情

相关推荐

使用 argparse 模块解析命令行参数的完整示例

在机器学习和深度学习的项目中,通常需要通过命令行参数来配置训练、验证和测试的各种参数。我们将以一个文本分类任务为例,展示如何使用 argparse 模块定义和解析命令行参数,并在训练脚本中使用这些参数来配置模型的训练过程。• 调用 parser.parse_args() 解析命令行参数,返回一个包含所有参数的命名空间对象 config。parser.parse_args():解析命令行参数,返回一个包含参数的命名空间对象。• 通过命令行参数,可以在不修改代码的情况下,调整模型的训练、验证和测试参数。

sdsasaAAS的博客 1439

python parser参数nargs=‘+‘涵义

表示设置参数个数 nargs=‘*’: 表示参数可设置零个或多个 nargs=‘+’:表示参数可设置一个或多个 nargs=‘?’: 表示参数可设置零个或一个 创建一个互斥组。 argparse 将会确保互斥组中只有一个参数在命令行中可用。 add_mutually_exclusive_group() 方法也接受一个 required 参数,表示在互斥组中至少有一个参数是需要的:...

weixin_49148527的博客 9167

Python argparse:实现命令行参数的优雅解析

在Python脚本开发中,我们常常需要让脚本能够接收用户从命令行输入的参数。例如,一个文件处理脚本可能需要用户指定要处理的文件路径,或者一个数据处理脚本可能需要用户输入数据的起始和结束时间。命令行参数解析就是将用户在命令行输入的字符串解析成程序可以使用的变量。Python的argparse模块提供了一种简单而强大的方式来实现这一功能,它可以自动生成帮助和使用信息,处理参数类型和默认值,让我们的脚本更加灵活和易用。本文介绍了Python的argparse模块,它可以帮助我们优雅地解析命令行参数。

AI Python 编程之道的博客 696

python argparse nargs_Python argparse:将可选参数与nargs = argparse.REMAINDER组合在一起

我必须遗漏一些明显的东西.目标是使用argparse和第一个参数,第二个可选参数和任何其他剩余参数可选.为了表明这个问题我做了两个测试解析器;它们之间的唯一区别是在一个中使用nargs = argparse.REMAINDER而在另一个中使用nargs =’*’.def doParser1(argsin):parser = argparse.ArgumentParser(description='...

weixin_39669202的博客 1329

python入门:argparse浅析 nargs=+作用

我就废话不多说了,大家还是直接看代码吧~ #aaa.py #version 3.5 import os #这句是没用了,不知道为什么markdown在编辑代码时,不加这一句,就不能显示代码高亮[汗] import argparse parser = argparse.ArgumentParser(description='Process some integers...') #初始化一个分析器 #parser.add_argument(中的参数) #__init__(self, option_strings, dest, nargs=None, const=None, default=Non

Sparse4Dv3 代码复现

打包数据集的元信息和标签,并生成所需的.pkl文件。最后还输出了很多跟踪相关的东西...然后通过K-means生成锚点。编译可变形聚合CUDA算子。安装motmetrics。

m0_60857098的博客 4489

Python中argparse模块命令行参数解析介绍

本文介绍了python使用argparse解析命令行参数,包括自动生成帮助和使用信息、位置参数和可选参数介绍、参数类型和验证、子命令系统、自动错误处理等部分,包含功能解释及示例代码。

记录应用与学习笔记,Python、算法、工具、踩坑... 1214

IEEE Transaction期刊模板使用注意事项

本文将总结使用IEEE Transactions系列期刊的投稿模板时的一些注意事项,包括模板本身的使用规范、参考文献的正确格式等其他内容。

weixin_39529207的博客 2万+

Python 之 argparse 解析命令行参数模块

对 Python argparse 解析命令行参数标准模块的学习笔记

一些笔记 801

手把手教你解决COLMAP编译中的Ceres CUDA支持问题(附详细配置步骤)

本文详细解析了COLMAP编译中Ceres CUDA支持问题的完整解决方案,包括环境准备、Ceres Solver的CUDA编译配置、COLMAP的CUDA集成配置等关键步骤。通过优化CMake参数和解决常见错误,帮助技术人员充分利用GPU加速优势,提升三维重建效率。

vodka的博客 861

开箱即用的Platform IO开发平台(包括Arduino,ESP8266,ESP32,STM32)

开箱即用的 Platform IO 离线开发环境,包含(ESP32,ESP32S2,ESP8266,Arduino,STM32)

qq_19703307的博客 755

argparse:简洁高效的命令行参数解析库

在众多的开源宝藏中,`argparse` 是一款专为 C 和 C++ 开发者设计的杰出命令行参数解析库。此项目灵感源自 Git 中使用的 `parse-options.c` 以及 Python 的成熟库 `argparse`,旨在简化 CLI(命令行界面)程序开发中的常见痛点——参数处理。 ## 核心技术栈与编程语言 `argparse` 完全采用 C 语言编写,同时也兼容 C++,这使得它成为

gitblog_01291的博客 994

【数字IC设计】芯片设计中的RDC

在芯片设计中,RDC是的缩写,类似于CDC(clock domain crossing),由于现在SOC芯片是有很多ECUs组成,为了使整个系统能够快速从复位中恢复, 用户希望SOC里面每个ECU模块都可以有自己独立的异步复位信号,这样可以在出问题的时候只复位有错误逻辑的模块,而使其它模块保持正常工作。

qq_40268672的博客 2187

Python 中如何使用 argparse 模块进行命令行参数解析?

在 Python 脚本开发中,经常需要从**命令行**传递参数,使程序更加**灵活**和**可配置**。`argparse` 是 Python 内置的命令行参数解析模块,能够轻松实现**解析参数、设置默认值、类型转换、可选参数**等功能。本文将详细介绍 `argparse` 模块的**基本用法、必选参数、可选参数、默认值、参数类型**等,并结合实际案例讲解如何编写一个**支持命令行参数**的 Python 脚本。

830

软件可靠性测试与评价

本文系统介绍了软件可靠性工程的核心内容,包括可靠性概念、模型分类、测试方法和评价体系。重点解析了可靠性测试的三大步骤:定义运行剖面、设计测试用例和实施测试收集数据,并以智能安防系统为例说明具体应用。可靠性评价需结合业务场景,通过量化指标(MTBF、失效率等)和模型预测持续优化系统。文章强调可靠性需贯穿软件全生命周期,通过闭环反馈实现持续改进,为关键系统提供质量保障。

moton2017的博客 2050

【算能】TPU(张量处理单元)的深度解析

算能(SOPHGO)作为国产AI芯片领域的核心企业,其TPU(张量处理单元)以高能效比与全场景覆盖能力为核心竞争力,专注于边缘计算与行业垂直领域的AI推理加速。

浩瀚之水的专栏 1548

python argparse命令行参数解析

11 # -*- coding: utf-8 -*- import argparse # (1) 声明一个parser ap = argparse.ArgumentParser() # (2) 添加参数 ap.add_argument("first") # 位置参数,这里表示第一个出现的参数赋值给first ap.add_argument("--digit", type=int, help="输入数字") # 声明一个int类型参数 ap.add_argument("--name", help="名

MusicDancing的博客 773

Coze实战:解锁多Bot协同与条件分支工作流的奥秘

本文详细介绍了在字节跳动Coze平台实现多Bot协同与条件分支工作流的方法。首先阐述了Coze平台的功能优势,包括丰富的插件、知识库和工作流功能。随后分步骤讲解了多Bot协同的实现:从准备工作、创建Bot到协同配置,并提供了电商客服的实例演示。在条件分支工作流部分,详细说明了条件节点的作用类型、条件设定方法以及具体配置操作,强调测试优化的重要性。最后通过电商平台综合案例,展示了多Bot协同与条件分支的实际应用效果,并针对常见问题提供解决方案。文章为开发者在Coze平台上构建智能应用提供了实用指导,有助于提升

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 450

python argparse - 命令行参数解析

argparse 模块是 Python 标准库的一部分,它使得编写用户友好的命令行接口变得简单。通过该模块,你可以生成帮助信息和解析命令行参数,同时还能自动生成命令的帮助和使用信息。

伤心的辣条 922

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python 解析命令行参数(argparse 库)

argparse是 Python 标准库中用于解析命令行参数的一个模块。它能够帮助开发者轻松地定义命令行接口,并从命令行获取参数值。与早期的getopt或optparse相比,argparse更加灵活且易于使用,支持子命令、选项分组以及自动生成的帮助文档等功能。argparse是一个强大且灵活的命令行参数解析库,适用于各种规模的 Python 脚本开发。通过它,我们可以轻松地定义命令行接口,处理复杂的参数组合,并自动生成详细的帮助文档。掌握argparse的使用技巧,将极大提升你的脚本编写效率和用户体验。

2501_91227466的博客 1712

VC中sqlite的使用

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

现代C++命令行参数解析库:argparse

**argparse** 是一个用于现代C++的命令行参数解析库。该项目的主要编程语言是C++,并且需要C++17及以上版本的支持。argparse库设计简洁,功能强大,旨在帮助开发者轻松处理命令行参数,从而简化命令行应用程序的开发过程。 ## 项目核心功能 argparse库的核心功能包括: 1. **命令行参数解析**:支持位置参数和可选参数的解析,开发者可以轻松定义和获取命令行参数。 ...

gitblog_09460的博客 788

Python argparse 模块:命令行参数解析全攻略

argparse是 Python 标准库中的一个模块,用于编写用户友好的命令行接口。它可以自动生成帮助和使用信息,并且能够处理命令行参数的解析和错误检查。可以通过继承类来创建自定义的参数动作。例如,下面的代码实现了一个自定义动作,用于将输入的字符串转换为大写。parser.add_argument('--name', action=UpperAction, help='输入姓名并转换为大写')print(f'转换后的姓名为: {args.name}')在命令行中运行会输出转换后的姓名为: JOHN。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 2077

高效解析命令行参数:掌握Python argparse的技巧

更多Python学习内容:ipengtao.com在开发命令行工具时,处理和解析命令行参数是一项重要的任务。Python的argparse模块提供了一个灵活且强大的方式来处理命令行参数,使得开发命令行工具变得更加容易。本文将详细介绍argparse模块的使用,包括基本概念、参数定义、选项处理、子命令支持以及实际应用案例。argparse模块简介argparse模块是Python标准库的一部分,用于...

涛哥聊Python 525

命令行参数解析模块库——Argparse库

壹 简介 有时候我们需要像Linux、Windows的shell一样使用命令行操作,而不是使用编译器编译python,这时候我们就可以使用脚本传递命令参数功能。在python中,解析命令行参数的方法有很多种,比如argv、getopt、optparse、argparse等。 optparse库使用一种更具声明性的命令行解析方式:创建OptionParser的实例,用选项填充它,然后解析命令行。optparse允许用户以常规GNU/POSIX语法指定选项,并为您生成用法和帮助消息,但已被Python3.2、

qq_41734243的博客 3464

argparse库&命令行参数解析

写在前面 这篇博客是 对Adrian Rosebrock 一篇 blog 的一些翻译和自己的理解,在这里,我很高兴和大家分享一下自己的收获。 内容概述 今天我们来一起学习一下一个很基础的skill, 命令行参数(command line argument) 。 接下来的教程主要可以分为三个阶段: 1 什么是命令行参数 2 为什么我们要使用命令行参数 3 如何来使用...

Pierce_KK的博客 2326

Python模块百科_命令行参数解析argparse

argparse是Python的一个标准库模块,用于编写用户友好的命令行接口。它是一个灵活和强大的工具,可以处理各种命令行参数和选项,并且可以自动生成帮助和用法信息。使用argparse模块,您可以将命令行参数解析为Python对象,以便在您的程序中使用。通过定义所需的参数和选项,您可以轻松地为命令行界面提供清晰和一致的语法。

长孤秋落的札记 1173
上一篇: shell其它命令
下一篇: cython是什么
蓬莱道人
博客等级 码龄11年 766粉丝 274原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值