Python 如何在一定范围内改变参数解析器的值?

Python 如何在一定范围内改变参数解析器的值?,python,python-3.x,argparse,Python,Python 3.x,Argparse,我正在尝试运行这段代码。我想给标志分配不同的值。给定的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)] fo

我正在尝试运行这段代码。我想给标志分配不同的值。给定的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))`

你似乎把变量弄混了。FLAGS.Ncolor是命令行中给定的值。例如FLAGS.Ncolor=5(代码中的默认值为2)。在上面的代码中,我将添加一个颜色变量:

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文档,例如:

如果要直接从命令行添加数字,可以这样做(注意add_argument()中的新'nargs=“+”'参数):

希望有帮助

然后,您可以在CLI上执行类似操作:

python your_script.py -nc 1 2 3 8 100 255

最好的

在设置解析器之后,您的代码基本上执行以下操作:

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
作为迭代变量是不正常的,但在某种程度上确实有效。它设置
名称空间的属性。但你为什么要这么做?通常这是
parse_args
方法的工作

for FLAGS.NCOLOR在…
中起作用,因为
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=[]中使用的一样)
列表理解。

请修正您的缩进。我不理解您的问题。必须有所有区分大小写的变量名!您需要将x:
中FLAGS.NCOLOR的
更改为x:
中FLAGS.NCOLOR的
更改为x:
中FLAGS.NCOLOR的
,因为在我的实际操作中,当您想要迭代基于硬编码范围的列表时,为什么还要使用argparser代码我必须改变Ncolor的值。我想知道我们可以给它分配一个值的范围吗?我知道arparse用于从命令行更改值。一次我们只能给它分配一个值。但是在上面的代码中,我想在某个范围内改变该值。可能吗?@sara,也许你可以给出一个手动示例你想要什么;我不确定我是否完全理解;如果上面的回答对你有好处,那就不用担心了
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