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_参数的实现,但我仍然不确定该函数可以接受什么。谢谢。当我把字典传进来时,我没有把它翻过来。