Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以将对象传递到argparse.add_参数中吗?_Python_Object_Parameter Passing_Argparse - Fatal编程技术网

Python 我可以将对象传递到argparse.add_参数中吗?

Python 我可以将对象传递到argparse.add_参数中吗?,python,object,parameter-passing,argparse,Python,Object,Parameter Passing,Argparse,而不是在调用add_argument的过程中分散一堆文本,如下所示: parser.add_argument('--foo', required=False, metavar='bar', type=str, help='help message', default='default') pars

而不是在调用
add_argument
的过程中分散一堆文本,如下所示:

parser.add_argument('--foo',
                    required=False,
                    metavar='bar',
                    type=str,
                    help='help message',
                    default='default')

parser.add_argument('--foo2',
                    required=False,
                    metavar='bar2',
                    type=str,
                    help='help message',
                    default='default')
我希望可以先创建一个容器,然后在循环中添加所有参数。
大概是这样的:

for arg in argument_container:
    parser.add_argument(arg)
我对python如何接受这些参数还不够熟悉,无法理解它们是否可以像我所希望的那样抽象成某种对象文字


有没有办法先将所有参数提取到一个容器中,然后通过如上所示的循环一次添加所有参数?

许多
add_argument
参数都是关键字参数,可以通过
**kwargs
语法传入。例如:

In [90]: parser=argparse.ArgumentParser()
In [91]: adict={"metavar":"bar", "help":"help message", "default":"default"}
In [92]: a1 = parser.add_argument('--foo', **adict)
In [93]: a1
Out[93]: _StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default='default', type=None, choices=None, help='help message', metavar='bar')

In [94]: parser.print_help()
usage: ipython3 [-h] [--foo bar]

optional arguments:
  -h, --help  show this help message and exit
  --foo bar   help message
在这里,我创建了一个包含一些参数的小字典,并通过
**adict
传入这些参数

我没有在字典中包含'--foo',因为它是一个位置参数。仍然可以分配给变量,并以这种方式传递

我保存了对
add_argument
返回的对象的引用,并显示了该引用。它显示了大多数参数如何成为生成的
操作
对象的属性


关于你的第二个论点:

In [95]: dest = "--foo2"
In [96]: adict={"metavar":"bar2", "help":"help message2", "default":"default2"}
In [97]: a2 = parser.add_argument(dest, **adict)
In [98]: 
In [98]: parser.print_help()
usage: ipython3 [-h] [--foo bar] [--foo2 bar2]

optional arguments:
  -h, --help   show this help message and exit
  --foo bar    help message
  --foo2 bar2  help message2

显然,这可以推广到使用字典列表,或者使用接受某些参数、生成缺失参数并以这种方式调用
add_argument
的函数。

要将
*args
**kwargs
都包含在同一列表中,可以将它们作为元组的一部分添加:

import argparse

parser = argparse.ArgumentParser(description='Process some strings.')

args = [(('--foo', '-f'), {'help':'Foo help', 'required':False, 'type':str, 'default':'foo'}),
        (('--bar', '-b'), {'help':'Bar help', 'required':False, 'type':str, 'default':'bar'})]

for arg in args:
    parser.add_argument(*arg[0], **arg[1])

parsed_args = parser.parse_args()

因此,元组的第一部分是另一个元组,包含参数的不同名称,然后(外部)元组的第二部分是带有关键字参数的dict。

您尝试过吗?我尝试过传入一个字典,但不起作用。我尝试过创建某种对象文字作为命名元组,但没有成功。我查看了add_参数的实现,但我仍然不确定该函数可以接受什么。谢谢。当我把字典传进来时,我没有把它翻过来。