python argparse变量到class变量的转换代码
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
python argparse变量到class变量的转换代码的更多相关文章
- python的学习笔记01_2变量 常量 注释 用户交互 格式化输出
变量是什么? 变量的作用 Variables are used to store information to be referenced and manipulated in a computer ...
- python下划线,私有变量
转自:http://blog.sina.com.cn/s/blog_58649eb30100g4zo.html Python用下划线作为变量前缀和后缀指定特殊变量. "单下划线" ...
- day02编程语言,Python语言介绍,Python解释器安装,环境变量,Python代码执行,pip,应用程序使用文件的三步骤,变量,变量的三大组成,比较,pycharm
复习 重点: 1.进制转换:二进制 与十六进制 2.内存分布:栈区 与堆区 # 二进制1111转换十六进制 => 8 4 2 1 => f 10101100111011 => 2a7 ...
- Python 3 学习笔记之——变量作用域、模块和包
1. 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的.变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称.Python 的作用域一共 ...
- 第三篇:python基础之数据类型与变量
阅读目录 一.变量 二.数据类型 2.1 什么是数据类型及数据类型分类 2.2 标准数据类型: 2.2.1 数字 2.2.1.1 整型: 2.2.1.2 长整型long: 2.2.1.3 布尔bool ...
- Python中的数据类型、变量、字符编码、输入输出、注释
数据类型 number(数字) 用于存储类型,通常分为int.long.float.complex: int:32位机器上占32位,取值范围为-231 ~ 231 - 1:64位机器上占64位,取值范 ...
- 第二篇.1、python基础之数据类型与变量
一.变量 1 什么是变量之声明变量 #变量名=变量值 age=18 gender1='male' gender2='female' 2 为什么要有变量 变量作用:“变”=>变化,“量”=> ...
- 编程语言类别;运行Python程序的方式;变量和常量;Python程序的垃圾回收机制;
目录 编程语言分类 运行Python程序的两种方式 1.交互式 变量与常量 1.变量 2.常量 3.小整数池 垃圾回收机制 编程语言分类 编程语言分为: 1.机器语言:直接用二进制的0和1和计算机(C ...
- python的__file__和__name__变量
#现在的目录结构为 #现在想要在web2/bin.py中调用web3/main.py模块中的方法 from web3 import main main.foo() #在pycharm中执行 ##### ...
- Python 变量类型及变量赋值
在 Python 中,变量不一定占用内存变量.变量就像是对某一处内存的引用,可以通过变量访问到其所指向的内存中的值,并且可以让变量指向其他的内存.在 Python 中,变量不需要声明,但是使用变量之前 ...
随机推荐
- SSM + Freemarker 开发框架快速搭建
1.项目骨架建立 一.使用开发工具IDEA,构建Maven项目,然后调整Maven项目结构,使其成为一个标准的web项目: 此处不选择Maven骨架,直接Next: 输入项目的相关信息,直接Finis ...
- Redisson 源码分析及实际应用场景之实现延迟队列
redis 参考目录: 生产级Redis 高并发分布式锁实战1:高并发分布式锁如何实现 https://www.cnblogs.com/yizhiamumu/p/16556153.html 生产级Re ...
- [python][selenium] Web UI自动化页面切换iframe框架
关联文章:Web UI自动化8种页面元素定位方式 1.切换iframe的方法:switch_to.frame 入参有4种: 1.1.id 1.2.name 1.3.index索引 1.4.i ...
- Asp.net core 学习笔记 Image processing (ImageSharp)
请移步修订版 : ASP.NET Core Library – ImageSharp .net 的生态烂是真的, 很多硬需求都没有人做, 开源的做着做着就闭源了的也很多. 今天说说 image pro ...
- Excel 国产化替换新方案
前言 在当前数字化转型和信创(信息技术应用创新)战略背景下,企业对于安全性.自主可控性和高效办公工具的需求日益增加.作为一款国产自主研发的高性能表格控件,SpreadJS 正成为替换 Excel 的最 ...
- 深入理解ConcurrentHashMap
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进行put操作,调用了HashMap的putVal(),具体原因: 假设两个线程A.B都在进行put操作,并且hash函数计算 ...
- SpringBoot——更换Tomcat服务器为 Jetty 服务器
Jetty服务器(可能会用到) Jetty 比 Tomcat更轻量级,可拓展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty 首先要启动Jetty服务器 --> ...
- [33](CSP 集训)CSP-S 模拟 4
A 商品 对于任意一组相邻的数 \((l,r)\ (l\le r)\),可以发现,不管怎么压缩,都会有 \(l\le r\),也就是说,相邻两个数的大小关系是不变的 那么我们就可以把 \(\sum(| ...
- [TK] BLO
初步分析 此题描述让我们想到Tarjan求割点,因此我们从割点的角度来探讨一下这道题. 假如我们去掉的不是一个割点,那么它实际上不会对连通性造成影响,但是根据样例可以看出来,删去这个点导致了其余点与当 ...
- Hive 2.3.2安装
一.安装mysql 安装MySQL服务器端和MySQL客户端: •安装: – yum install mysql – yum install mysql-server •启动: – /etc/init ...