argparse

一、基本范例

不配置可选参数 运行程序 即为None
如果改名以双横线开头 那么配置参数名字前也要有双横线
即和引号内完全一致

import math
import argparse
# 创建一个解析对象 理解为装载参数的容器 并添加描述 计算圆柱体体积
# 可选参数有 prog 重新指定程序名称 不指定则同python文件 usage 描述使用方法
# description 输出一行提示文本
parser = argparse.ArgumentParser(description="Calculate volume of a Cylinder")

# 为这个解析对象 添加多个命令行参数
# 传参 Run Edit Configurations parameters
# 不加--时顺序传参 空格隔开即可运行
# 想要默认一定要在名字前缀--
# 加了--就不能顺序传参 要么默认参数 要么格式类似 --radius 2 --height 4  如果required=True(只针对可选 不针对位置) 就是 不可以默认
# type 接受参数转化什么类型
parser.add_argument("-R", "--radius", default=2, type=int, metavar=" ", help="Radius of Cylinder")
parser.add_argument("-H", "--height", default=3, type=int, metavar=" ", help="Height of Cylinder")
# 取别名之后可以 --radius 2 --height 4 不能用-h取别名 单独参数-h显示帮助提示 metavar=" "可以规范化显示帮助格式
# 如果不加 default 选择参数--条件下也能跑完程序 未初始化被赋值None
# nargs = "+" 当前参数消耗数目 +至少一个 ?0或1 *任何可能
# choices 指定参数可以接收 metavar指定实际接收到的传入参数 dest指定参数被添加到args上的名字 默认不变

# 互斥参数
group = parser.add_mutually_exclusive_group()  # 创建容器并添加互斥组
group.add_argument("-Q", "--quiet", action="store_true", help="print quiet")
# action在不同值时候意义不同
# 当为action赋值store_true时 程序默认为False 当你执行这个命令时 默认值就会被激活为True store_false 反之
# 默认为store仅仅保存 不做其他事  store_const必须同时指定const 读取的是parser.add_argument预置const值
# append 命令行参数被保存为列表 该参数可以被指定多次 所有次被指定都保存在列表中
# append_const 不需要指定具体值 需要指定const加到列表中 一般同时指定dest为列表名称
# count 记录当该参数出现时次数 该参数多次指定 help 会打印帮助信息随之退出
# version 还需在add_argument中添加version信息 会输出version
# extend 多次出现 汇总至列表
group.add_argument("-V", "--verbose", action="store_true", help="print verbose")
# -R 2 -H 3 -V如此配置 args.verbose 为True 当不加-Q与-V时 执行else

# 实例化一个类对象 可以通过类对象访问类元素(注意不是访问对象元素 但还要实例化类对象)
args = parser.parse_args()  # 解析
# 可以指定 args = None args以列表形式 列表每个元素依次为对应命令行参数 namespace = None如果指定所有参数都会接收为它的属性


def cylinder_volume(radius, height):
    vol = (math.pi) * (radius ** 2) * (height)
    return vol


if __name__ == '__main__':
    parser.print_help()  # 非-h的另一种打印方法

    volume = cylinder_volume(args.radius, args.height)

    if args.quiet:
        print(volume)
    elif args.verbose:
        print("Volume of Cylinder with radius %s and height %s is %s" % (args.radius, args.height, volume))
    else:
        print("Volume of Cylinder = %s" % volume)

二、范例A

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("s", type=int)
parser.add_argument("-j", type=int)  # 可选
parser.add_argument("n", type=int)
parser.add_argument("-k", type=int)
# 正常配置 1 -j 2 3 -k 4 可行
# 选择参数后置 1 2 -j 3 -k 4 可行 无论选择参数如何穿插 位置参数总也顺序除去选择参数
args = parser.parse_args()
print(args)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-s", type=int, required=True)  # 必须出现 不指定报错
parser.add_argument("-j", dest="jjjj", action="store_true")  # 不指定类型就是字符串 命名为jjjj 不需要赋值 只需要指定为True 不指定False
parser.add_argument("nums", metavar="N", type=int, nargs="+")  # 至少一个

# parser.add_argument("-k", action="append", type=int, nargs="*")  # 几个都行
# # -s 1 -j 2 3 -k 4 5 6    ->    Namespace(jjjj=True, k=[[4, 5, 6]], n=[2, 3], s=1)

# # 修改第四行
# parser.add_argument("-k", action="append", type=int)  # 几个都行
# # -s 1 -j -k 4 5 6   ->   Namespace(jjjj=True, k=[4], nums=[5, 6], s=1)
args = parser.parse_args()
print(args)

三、传入参数写入字典

访问字典时键值对不带前缀的双减号 但是需要带双引号引用为字符
使用类成员方法访问时候 不用双引号引用为字符

print(args.__dict__)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--a', default=64, type=int)
parser.add_argument('--b', default=88, type=int)
parser.add_argument('--c', default=2, type=int)
parser.add_argument('--d', default=0, type=int)
args = parser.parse_args()
print(args.a)
print(args.__dict__)
print(type(args.__dict__))
print(args.__dict__['a'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值