首页 > 编程语言 >python argparse变量到class变量的转换代码

python argparse变量到class变量的转换代码

时间:2023-07-22 18:13:27浏览次数:29  
标签:argparse 变量 get python parser actions default print store

  github上的项目总喜欢使用argparse + bash来运行,这对于快速运行一个项目来说可能有好处,但在debug的时候是很难受的。因为我们需要在.sh文件中修改传入参数,并且不能使用jupyter。

  以下是把parser转换成class类的一个代码示例:

#%%
import argparse

parser = argparse.ArgumentParser()
 
parser.add_argument("--get_pred",
                    action='store_true',
                    help="Whether to get prediction results.")
parser.add_argument("--get_ig_pred",
                    action='store_true',
                    help="Whether to get integrated gradient at the predicted label.")
parser.add_argument("--get_ig_gold",
                    action='store_true',
                    help="Whether to get integrated gradient at the gold label.")
parser.add_argument("--get_base",
                    action='store_true',
                    help="Whether to get base values. ")
parser.add_argument("--batch_size",
                    default=16,
                    type=int,
                    help="Total batch size for cut.")
parser.add_argument("--num_batch",
                    default=10,
                    type=int,
                    help="Num batch of an example.")

#%% 转换
def print_store_actions(store_actions, print_attrs = ['type', 'help'], need_default = True):
    if len(print_attrs) > 0:
        s = '# '
        for i in store_actions.__dir__():
            if i in print_attrs:
                s0 = str(getattr(store_actions, i))
                s0 = s0.replace('\n', ' ')
                s += s0 + ', '
        print(s[:-2])
    if need_default:
        if getattr(store_actions, 'type') == str:
            s = '# default = "' + str(getattr(store_actions, 'default')) + '"'
        else:
            s = '# default = ' + str(getattr(store_actions, 'default'))
        print(s)

def parser_2_class(parser, print_attrs = ['type', 'help'], need_default = True):
    for i in parser._actions:
        if i.option_strings[0] == '-h':
            continue
        v = '"' + i.default + '"' if i.type == str else i.default
        if len(print_attrs) == 0:
            print(i.option_strings[0][2:], '=', v, end='  ')
            print_store_actions(i, print_attrs, need_default)
        else:
            print_store_actions(i, print_attrs, need_default)
            print(i.option_strings[0][2:], '=', v)

parser_2_class(parser, ['type', 'help'], True)

  然后使用输出构建一个只包含成员变量的类,就能实现和parser获得的变量空间一样的效果,从而可以方便地debug,并且无需修改项目的其它代码。如下:

class args:
    # None, Whether to get prediction results.
    # default = False
    get_pred = False
    # None, Whether to get integrated gradient at the predicted label.
    # default = False
    get_ig_pred = False
    # None, Whether to get integrated gradient at the gold label.
    # default = False
    get_ig_gold = False
    # None, Whether to get base values. 
    # default = False
    get_base = False
    # <class 'int'>, Total batch size for cut.
    # default = 16
    batch_size = 16
    # <class 'int'>, Num batch of an example.
    # default = 10
    num_batch = 10

 

标签:argparse,变量,get,python,parser,actions,default,print,store
From: https://www.cnblogs.com/qizhou/p/17573799.html

相关文章

  • python 字符串,取前4个
    Python字符串-取前4个导言Python是一种简单易学、功能强大的编程语言,被广泛应用于不同领域的开发和数据处理任务中。字符串是Python中的一种基本数据类型,用于表示文本和字符序列。本文将介绍如何在Python中取字符串的前4个字符,并给出相应的代码示例。字符串的基本概念......
  • python,is_dir()
    Python中的os.path.isdir()函数在Python编程语言中,os.path模块提供了一系列用于处理文件路径的函数。其中之一就是os.path.isdir()函数,它用于检查一个路径是否为目录。什么是目录?在计算机中,目录是一种用于组织和存储文件和其他目录的文件系统结构。目录可以包含其他目录和文件,形......
  • python 字符串 不在数组中
    如何判断一个字符串不在数组中引言本文将教会你如何判断一个字符串是否不在数组中。在Python中,我们可以使用循环结构和判断语句来完成这个任务。首先,我们来整理一下实现该功能的流程,然后逐步介绍每一步需要做什么,以及需要使用的代码和其注释。流程概述步骤描述步骤1......
  • python, 画图,指数坐标轴
    Python中的指数坐标轴绘图介绍绘图是数据分析和可视化的重要工具之一,而Python提供了多种绘图库供我们使用。在这篇文章中,我们将重点介绍如何在Python中使用Matplotlib库来绘制指数坐标轴的图形。指数坐标轴可以有效地展示非线性数据,特别是当数据点之间的差异很大时。Matplotlib......
  • python 字典求差集
    Python字典求差集在Python中,字典(Dictionary)是一种无序的、可变的数据类型,它由一系列键(Key)和对应的值(Value)组成。字典的特点是可以通过键来访问对应的值,并且键必须是唯一的。在某些场景中,我们可能需要对字典进行一些操作,如求差集。本文将介绍Python字典求差集的方法,并给出相应的代......
  • python 字典 子集
    Python字典子集介绍在Python编程语言中,字典(dictionary)是一种无序、可变和可迭代的数据类型。字典由键(key)和对应的值(value)组成,每个键值对(key-valuepair)之间用逗号隔开,整个字典被花括号包围。字典是一种非常常用的数据结构,用于存储和管理大量的数据。在本文中,我们将探讨Python字......
  • python 双变量循环
    Python双变量循环在Python编程语言中,循环是一种重复执行特定代码块的控制结构。除了常见的for循环和while循环之外,Python还提供了双变量循环,也称为迭代器循环。双变量循环是一种同时迭代两个或多个对象的循环方式,非常适用于遍历两个列表、两个数组或两个值的情况。基本语......
  • python 转 json []
    Python转JSON[]1.流程下面是将Python转换为JSON[]的整个流程:步骤描述1创建一个Python对象2使用json模块的dumps()方法将Python对象转换为JSON字符串3使用json模块的loads()方法将JSON字符串转换为Python对象2.代码实现步骤......
  • python 数组是否存在值 对应key
    判断Python数组中是否存在某个值对应的键1.前言在Python中,数组是一种有序的、可变的数据类型,可以存储多个值。数组中的每个值都有对应的索引,就像一个字典中的键值对一样。在某些情况下,我们可能想要判断数组中是否存在某个值对应的键。本文将介绍如何使用Python来实现这个功能。......
  • python 抓包https
    Python抓包HTTPS流程抓包是指捕获网络数据包并分析其中的内容。在Python中,我们可以使用第三方库mitmproxy来进行HTTPS抓包操作。下面将详细介绍如何使用Python抓包HTTPS的流程以及每一步所需要的代码。1.安装mitmproxy首先,我们需要安装mitmproxy库。可以使用以下命令进行安装:p......