【Python基础函数笔记】parser.add_argument详解

接上一篇:写一个python文件,在shell脚本中运行

在Python中使用argparse库解析命令行参数时,参数可以有两种主要形式:位置参数(positional arguments)和选项参数(optional arguments)。参数中是否加--的区别主要涉及到选项参数。

  1. 位置参数(Positional Arguments):这些参数是不带--前缀的参数。它们通常用于需要按特定顺序提供的参数,且通常是必需的。

  2. 选项参数(Optional Arguments):这些参数通常带有--前缀,如 --loss, --net, --SGD。选项参数是可选的,不需要按照特定的顺序提供,且可以有默认值。脚本要求必须提供这两个参数。如果你加入--前缀,这些参数就会被解释为选项参数,可以选择性地提供,且可以有默认值。

  • 单字符选项:-d(相对不够清晰)
  • 多字符选项:--debug(更具描述性)

1.来了解下 parser.add_argument函数的参数

可以看下下面的一个参数例子


def get_args():
    parser = argparse.ArgumentParser()
    parser.add_argument('-b', '--batch_size', type=int, default=64)
    parser.add_argument('-i', '--image_directory', type=str, default='FGNET/images')
    parser.add_argument('-ls', '--leave_subject', type=int, default=1)
    parser.add_argument('-lr', '--learning_rate', type=float, default=0.001)
    parser.add_argument('-e', '--epoch', type=int, default=100)
    parser.add_argument('-r', '--resume', type=str, default=None)
    parser.add_argument('-K', '--K', type=int, default=6)
    parser.add_argument('-L1', '--LAMBDA1', type=float, default=0.2)
    parser.add_argument('-L2', '--LAMBDA2', type=float, default=0.25)
    parser.add_argument('--net', type=str, default='ResNet', help='VGG/ResNet')
    parser.add_argument('-s', '--seed', type=int, default=42)
    parser.add_argument('-m', '--milestones', nargs='+', required=True, default=15)  # -m 是一个短选项参数,后面跟着一系列值 15 30 45 60 75 90,表示将这些值作为参数传递给 -m。
    parser.add_argument('-rd', '--result_directory', type=str, default="FGNET_experiments/subject")
    parser.add_argument('-pi', '--pred_image', type=str, default=None)
    parser.add_argument('-pm', '--pred_model', type=str, default=None)
    parser.add_argument('-K', '--K', type=int, default=6)
    parser.add_argument('--loss', type=str, default='mrloss', help='mean_softmax/residual_softmax/softmax/mrloss/mvloss')
    parser.add_argument('--SGD', action='store_true')
    parser.add_argument('--Adam', action='store_true')
    parser.add_argument('--gpu', type=int, default=2, help='GPU to use')
    return parser.parse_args()

参数详解 

name or flags:参数的名称或选项。可以是一个字符串,例如 '--batch_size''-b',也可以是一个字符串列表,例如 ['-b', '--batch_size'],其中 --batch_size 是长选项,-b 是短选项。

type:表示输入参数的类型,可以是int,str,float

default:表示参数默认的值

help: 帮助信息,例如help='VGG/ResNet' 提供了关于该参数的帮助信息,当用户使用 -h--help 选项时,该信息将显示在帮助文档中。

nargs:用于定义一个选项参数应该消耗的命令行参数数量。它可以接受以下不同的取值:

  • '+':表示选项参数可以接受一个或多个参数值。多个参数值将被解析为一个列表。例如,-m 15 30 45 将解析为 args.milestones = [15, 30, 45]

  • '*':表示选项参数可以接受零个或多个参数值。多个参数值将被解析为一个列表。例如,-m 15 30 45 将解析为 args.milestones = [15, 30, 45],而不提供 -m 参数将解析为 args.milestones = []

  • int:表示选项参数应该消耗固定数量的参数值。例如,nargs=2 表示选项参数需要接受两个参数值。例如,-m 15 30 将解析为 args.milestones = [15, 30]

  • argparse.REMAINDER:表示选项参数应该消耗剩余的命令行参数,将其解析为一个列表。例如,-m 15 30 45 60 75 90 将解析为 args.milestones = [15, 30, 45, 60, 75, 90]

required:指定该参数是否是必需的。默认为 False,即可选参数。如果将其设置为 True,则在命令行中必须提供该参数,否则将引发错误。

choices:指定参数的可选值列表。如果设置了该参数,那么命令行中提供的值必须是列表中的一个,否则将引发错误。

action:指定参数的动作。常见的动作包括 'store'(默认动作,将参数值存储为属性)、'store_true'(将参数解析为 True)、'store_false'(将参数解析为 False)、'append'(将多个参数值存储为列表)等。

2.看下如何运用--heip

help.py

import argparse


def get_args():
    parser = argparse.ArgumentParser()
    parser.add_argument('--net', type=str, default='ResNet', help='VGG/ResNet')


    return parser.parse_args()


def main():
    args = get_args()

    # 获取命令行参数的值
    net = args.net

    # 在这里使用参数进行相应的操作
    print(f"net: {net}")


if __name__ == '__main__':
    main()

使用shell命令行查看帮助信息,一般代码是自己写,不会看的哈!

python filename.py --help
python filename.py -h

3.看下action四个参数的区别

 help.py文件

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--input', action='store', type=str, help='Input file path')
    parser.add_argument('--verbose', action='store_true', help='Enable verbose mode')
    parser.add_argument('--output', action='append', help='Output file path')

    args = parser.parse_args()

    # 使用解析后的参数进行后续处理
    if args.input:
        print(f'Input file: {args.input}')

    if args.verbose:
        print('Verbose mode enabled')

    if args.output:
        print(f'Output files: {args.output}')

if __name__ == '__main__':
    main()

 store_false与store_true一样,知识默认识别为真和假。

  • --input 参数使用了默认的 store 动作,将输入文件路径存储为字符串类型的属性。

  • --verbose 参数使用了 store_true 动作,将其解析为布尔值类型的属性。当命令行中使用了 --verbose 选项时,args.verbose 的值将为 True

  • --output 参数使用了 append 动作,将多个输出文件路径存储为列表类型的属性。在命令行中多次使用 --output 选项并提供不同的值,例如 --output file1.txt --output file2.txt,则 args.output 将包含 ['file1.txt', 'file2.txt']

4.发现参数使用了nargs='+'参数,没法赋初值

运行1中给的代码,就会报错。

 没法debug,只好将那行参数注释,在主函数中赋初值给milestones,再debug看看。改代码真的要耐着性子,不然一有错,就不想搞了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿月浑子の

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

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

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

打赏作者

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

抵扣说明:

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

余额充值