Python 通过3个argparse参数确定

Python 通过3个argparse参数确定,python,argparse,Python,Argparse,首先,如果我的标题有误导性/不清楚,我表示歉意,因为我真的不确定用什么方式来表达它是最好的 我有3个可选参数,它们使用action='store\u true'。让我们将参数标志保留为-va,-vb,-vc var_list = ['a', 'b', 'c'] if args.va: run_this_func(var_list[0]) if args.vb: run_this_func(var_list[1]) if args.vc: run_this_func(var

首先,如果我的标题有误导性/不清楚,我表示歉意,因为我真的不确定用什么方式来表达它是最好的

我有3个可选参数,它们使用
action='store\u true'
。让我们将参数标志保留为
-va,-vb,-vc

var_list = ['a', 'b', 'c']
if args.va:
    run_this_func(var_list[0])
if args.vb:
    run_this_func(var_list[1])
if args.vc:
    run_this_func(var_list[2])

if not args.higha and not args.highb and not args.highmem:
    for var in var_list:
    run_this_func(var)

if args.va and args.vb:
    run_this_func(var_list[:-1])
if args.vb and args.vc:
    run_this_func(var_list[1:])
if args.vc and args.va:
    run_this_func(var_list[0], var_list[2])
如何以更高效的方式编写代码?上面的方法,我已经使用,虽然它可能会工作,似乎更像是一个迂回的方式让事情继续下去

最初我考虑使用tuple,这样它将是
input=(args.va,args.vb,args.vc)
这样它就可以返回我,例如
(真,假,假)
。。。但不确定这是否理想


有什么建议吗?

我想你也可以用tuple

var_list = ['a', 'b', 'c']
input = (args.va, args.vb, args.vc)
vars = [item for index, item in enumerate(var_list) if args_tuple[index]]
run_this_func(*vars)

我认为在这种情况下,可以使用的和关键字来获取所需的列表(a、b、c的某个子集),而不必基于多个参数进行筛选

我建议您这样做:

parser = argparse.ArgumentParser()
parser.add_argument('-v', choices=['a','b','c'], nargs='+')
args = parser.parse_args()
这意味着:创建一个可选参数
-v
,该参数可以接受一个或多个值,但这些值中的每一个都必须是
['a'、'b'、'c']

然后可以从命令行向其传递如下参数(例如):

这意味着
args
看起来像:
Namespace(v=['a','c'])
并且
args.v
看起来像
['a','c']
这是您正在查找的列表(并且没有任何筛选!)

然后,您可以通过以下方式调用函数:

run_this_func(args.v)

变量
[arg的变量,zip中的变量(输入,变量列表),如果arg]
run_this_func(args.v)