我正在尝试运行这段代码。我想为FLAGS.Ncolor指定不同的值,因为给定的是x。但是当我运行这段代码时,它会选择Ncolor的默认值为2.
`p=argparse.ArgumentParser()
passes to add_argument()
p.add_argument('--Ncolor','-nc', default=2, type=int, help='Number of
colors')
FLAGS=p.parse_args()
x = [ i+1 for i in range(5)]
for FLAGS.NCOLOR in x:
print ("value is %d" % (FLAGS.Ncolor))`
答案 0 :(得分:0)
你似乎在混淆变量。 FLAGS.Ncolor是命令行给出的值。例如,FLAGS.Ncolor = 5(代码中的默认值为2)。在上面的代码中,我将添加一个COLORS var:
p=argparse.ArgumentParser()
p.add_argument('--Ncolor','-nc', default=2, type=int, help='Number of colors')
FLAGS=p.parse_args()
colors = [c for c in range(1,FLAGS.Ncolor+1)]
for c in colors:
print ("value is %d" % c)
因此您可以获得所需值的列表颜色。
我认为你没有正确理解argparse在代码中做了什么以及你从p.parse_args()得到了什么。查看argparse doc,例如:link
如果你想直接添加命令行中的数字,你可以这样做(注意add_argument()中新的' nargs =" +"'参数):
p=argparse.ArgumentParser()
p.add_argument('--Ncolor','-nc', default=2, type=int, nargs='+',help='Number of colors')
FLAGS=p.parse_args()
for c in FLAGS.Ncolor:
print ("value is %d" % c)
希望有所帮助
然后您可以在CLI处执行类似的操作:
python your_script.py -nc 1 2 3 8 100 255
最佳
答案 1 :(得分:0)
在设置解析器之后,您的代码基本上正在执行:
In [195]: import argparse
In [196]: FLAGS = argparse.Namespace(Ncolor=2)
In [197]: FLAGS
Out[197]: Namespace(Ncolor=2)
In [198]: for FLAGS.NCOLOR in range(3):
...: print(FLAGS)
...:
Namespace(NCOLOR=0, Ncolor=2)
Namespace(NCOLOR=1, Ncolor=2)
Namespace(NCOLOR=2, Ncolor=2)
使用FLAGS.NCOLOR
作为迭代变量是不正常的,但它在某种程度上确实有效。它设置Namespace
的属性。但是你为什么要那样做呢?通常这是parse_args
方法的工作。
for FLAGS.NCOLOR in ...
有效,因为for
语句为FLAGS.NCOLOR
分配了值,而FLAGS
是一个接受这种赋值的简单对象类。
更正常的迭代是:
In [199]: FLAGS = argparse.Namespace(Ncolor=2)
In [200]: for i in range(3):
...: print(i, FLAGS, FLAGS.Ncolor)
...:
0 Namespace(Ncolor=2) 2
1 Namespace(Ncolor=2) 2
2 Namespace(Ncolor=2) 2
其中i
是临时迭代变量(正如您在x=[]
列表理解中使用的那样。