关于argparse基本使用
刚刚开始接触神经网络代码,发现好多从github上下载下来的代码中都有这个,尤其出现在train.py文件的main函数的第一行,所以来给自己扫个盲
首先给出使用例子
import argparse
import torch
if __name__ == "__main__":
#argparse:是个库,arg代表参数 parse代表解码 ArgumentParser代表参数解码 即把在命令行中的文本输入(比如字符串)通过ArgumentParser解码成参数
parser = argparse.ArgumentParser(description = 'example using argparse')#parser本质是一个对象,argparse.ArgumentParser是一个类,description在输入xx.py -h的时候会出现
#print(type(parser))
parser.add_argument('-n',default = 'zhang')#向parser这个对象里增加要转换的参数 ‘-n’这样的表示是命令行前缀 在linux上的shell用的比较多 还没有深究 用'--n'也可以
parser.add_argument('-y',default = '21')
args = parser.parse_args()#ZJK理解 parse to args 将输入的命令行解析为参数
print(args.n)
print(args.y)
print(type(args.n))#arg.n是字符串类别
1.这部分代码干嘛用的啊?
当用命令行执行代码文件时,有时候这群人想要手动去输入一些参数,比如姓名,年龄等。这些参数频繁改变,老去改代码感觉好烦,所以就每次在命令行执行代码文件的时候,直接在xxx.py后面以一定的形式加上需要的参数,然后再去执行代码就好了
2.那用起来啥形式啊?
以pycharm为例,在pycharm的命令行中输入
python.exe argparse_study.py -n handsome_man -y 18
示例:
(SR_Space) D:\py_study\pytorch_study>python.exe argparse_study.py -n handsome_man -y 18
handsome_man
18
<class 'str'>
意思就是我输入了两个参数:名字和年龄。然后经过某些转换,这两个参数就到了args这个对象里面了,然后一调用一打印就出来了。
3.那就看看它咋转换的呗
3.1 咱先看看argparse这个词语啥意思
arg 表示 argument,就是参数的意思
parse表示解码的意思
合在一块就是参数解码的意思,就是把你利用键盘敲在命令行上的参数解码到参数里,具体内部不深究,先知道咋用。
3.2 argparse.ArgumentParser()
这个函数的作用就是创建一个解码器parser,里面有一个可选参数叫description,你可以手动输入一个字符串,也可以不写。这个description的内容你如果正常运行是看不到的,它就是为了让读代码的人知道要输入啥参数的提示信息,正常你需要通过-h这个命令来获得。
(SR_Space) D:\py_study\pytorch_study>python.exe argparse_study.py -h
usage: argparse_study.py [-h] [-n N] [-y Y]
example using argparse
3.3parser.add_argument()
这个东西吧 就是往parser这个对象里增加参数,咋用呢?
就是先输入你想要的加的参谋是名,比如n,输入格式是’-n’或者’–n’,然后可以选择多打一个default ,意思就是你没有输入的时候的默认值
关于这个’-n’或者’–n’,它是linux里shell的一种命令行前缀。没有深究
3.4parser.parse_args()
最后一步进行解码,可以这样理解:parse to args,把parser的东西转到参数里。