搜索的时候出现以下结果:
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博客
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']