argparse的Namespace命名空间使用方法

argparse是用来做什么的?

搜索的时候出现以下结果:

argparse 是 Python 的一个标准库,用于命令行参数的解析,这意味着我们无需在代码中手动为变量赋值,而是可以直接在命令行中向程序传递相应的参数,再由变量去读取这些参数。

argparse模块是python的一个命令行解析包,可以直接让我们在命令行向程序中传入参数和修改参数

这句话我觉得还是比较难理解的,从’这意味着‘开始我是一个字也没理解

因为我通常的用法设这样的:

1、

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--dataset_name", type=str, default="assist2015")
    parser.add_argument("--model_name", type=str, default="saint")
    parser.add_argument("--emb_type", type=str, default="qid")
    parser.add_argument("--save_dir", type=str, default="saved_model")
    # parser.add_argument("--learning_rate", type=float, default=1e-5)
    parser.add_argument("--seed", type=int, default=42)
    parser.add_argument("--fold", type=int, default=0)
    parser.add_argument("--dropout", type=float, default=0.2)
    
    parser.add_argument("--emb_size", type=int, default=256)
    parser.add_argument("--learning_rate", type=float, default=1e-3)
    parser.add_argument("--num_attn_heads", type=int, default=8)
    parser.add_argument("--n_blocks", type=int, default=4)
    parser.add_argument("--use_wandb", type=int, default=1)
    parser.add_argument("--add_uuid", type=int, default=1)
   
    args = parser.parse_args()

    params = vars(args)
    main(params)

其中vars()函数回对象object的属性和属性值的字典对象

说白了就是把他变成一个字典

那为什么不直接写一个字典呢?字典的写法还简单

2、

config = Namespace(
    project_name = 'test',
    
    batch_size = 512,
    
    hidden_layer_width = 64,
    dropout_p = 0.1,
    
    lr = 1e-4,
    optim_type = 'Adam',
    
    epochs = 15,
    ckpt_path = 'checkpoint.pt'
)

这个的用法也是跟字典用法相同

那argparse的特别之处到底在哪里呢?

我们再回到上面的说法中

 可以直接让我们在命令行向程序中传入参数和修改参数

argparse的本质用法根本不是上面两种样子,上面两种用法是argparse的滥用,

正常用法如下:

import argparse  # 1. 导入argparse模块
parser = argparse.ArgumentParser()  # 2. 创建ArgumentParser对象
parser.add_argument("number", help="请输入数字", type=int,default=10)  # 3. 添加参数
parser.add_argument("str", help="请输入字符串", type=str)
args = parser.parse_args()  # 4. 解析参数
print(args.number)
print(args.str)

 如上,有两个变量,args.number和args.str,args.number有默认值10,而args.str没有值

那么在运行这个文件时必须要对其赋值,不然就报错

 对其赋值并修改值

 查看提示信息

现在再来看这句话 可以直接让我们在命令行向程序中传入参数和修改参数应该就明白了

-

--

不带

看这篇博客python中的argparse模块(参数解析) --和没有--有什么区别_独行侠_阿涛的博客-CSDN博客

argparse的Namespase用途及使用方法

  • parse_args()默认使用的简单类,用于创建一个包含属性的对象,并返回这个对象。
    这个类很简单,就是一个包含字符串表示的 object子类。如果你更习惯用字典样式查看属性,你可以用标准的Python用语, vars():
    ArgumentParser为已有对象分配属性,而非新建一个Namespace,也可能很有用。可以通过namespace=关键字参数来指定。

  • 将字符串参数转为对象,并将他们作为属性分配为命名空间。

config = Namespace(
    project_name = 'test',
    
    batch_size = 512,
    
    hidden_layer_width = 64,
    dropout_p = 0.1,
    
    lr = 1e-4,
    optim_type = 'Adam',
    
    epochs = 15,
    ckpt_path = 'checkpoint.pt'
)
config.__dict__就可以将其转换成字典

和字典一样可以调用

Namespace:   config.project_name

字典:            config['project_name']

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值