Python 使用argparse读取默认参数

Python 使用argparse读取默认参数,python,argparse,Python,Argparse,在argparse中使用类似的内容时: parser.add_argument("-option1", type=int, nargs=1, default=1, choices=xrange(1, 10), help="option 1 message") 如果未传递参数,则args.option1为整数。如果传递了参数,则args.option是一个列表 这意味着我必须使用args.option1或args.option1[0]。有可能避免这种情况吗 如果将nargs设置为整数,则参数在指

在argparse中使用类似的内容时:

parser.add_argument("-option1", type=int, nargs=1, default=1, choices=xrange(1, 10), help="option 1 message")
如果未传递参数,则args.option1为整数。如果传递了参数,则args.option是一个列表


这意味着我必须使用args.option1或args.option1[0]。有可能避免这种情况吗

如果将
nargs
设置为整数,则参数在指定时始终是列表。您可以使用
“?”
将其设置为单个值或默认值:

parser.add_argument(
    "-option1", type=int, nargs='?', default=1, 
    choices=xrange(1, 10), help="option 1 message")
parser.add_argument(
    "-option1", type=int, nargs='?', default=1, const=1,
    choices=xrange(1, 10), help="option 1 message")
从:

  • N
    (一个整数)<代码>N来自命令行的参数将被收集到一个列表中。
[……]

  • “?”
    。如果可能,将从命令行使用一个参数,作为单个项生成。如果不存在命令行参数,将生成默认值
我的。不过,您可能也希望设置
常量
,以防有人在命令行上仅使用
-option1
,后面没有值;如果没有
const
,则该值将设置为
None
。只需将其设置为与默认值相同的值:

parser.add_argument(
    "-option1", type=int, nargs='?', default=1, 
    choices=xrange(1, 10), help="option 1 message")
parser.add_argument(
    "-option1", type=int, nargs='?', default=1, const=1,
    choices=xrange(1, 10), help="option 1 message")
另一个选项是不设置
nargs

parser.add_argument(
    "-option1", type=int, default=1, 
    choices=xrange(1, 10), help="option 1 message")
这通常意味着几乎与
nargs='?'
相同:

如果未提供
nargs
关键字参数,则使用的参数数量由操作确定通常这意味着将使用单个命令行参数并生成单个项目(而不是列表)。

区别在于命令行上不允许使用空的
-option1
参数;不需要设置
const

演示:

>>来自argparse导入ArgumentParser
>>>parser=ArgumentParser()
>>>parser.add_参数(
…“-option1”,type=int,nargs=“?”,default=1,const=1,
…选项=xrange(1,10),help=“选项1消息”)
_StoreAction(option_strings=['-option1'],dest='option1',nargs='?',const=1,default=1,type=,choices=xrange(1,10),help='option 1 message',metavar=None)
>>>parser.parse_args(['-option1',4'])#带有参数的选项
名称空间(选项1=4)
>>>parser.parse_args(['-option1'])#带有*no*参数的选项
名称空间(选项1=1)
>>>parser.parse_args([])#选项未指定
名称空间(选项1=1)
>>>parser=ArgumentParser()
>>>parser.add_参数(
…“-option1”,类型=int,默认值=1,
…选项=xrange(1,10),help=“选项1消息”)
_StoreAction(option_strings=['-option1'],dest='option1',nargs=None,const=None,default=1,type=,choices=xrange(1,10),help='option 1 message',metavar=None)
>>>parser.parse_args(['-option1',4'])#带有参数的选项
名称空间(选项1=4)
>>>parser.parse_args([])#选项未指定
名称空间(选项1=1)
>>>parser.parse_args(['-option1'])#带有*no*参数的选项
用法:[-h][选项1{1,2,3,4,5,6,7,8,9}]
:错误:参数-选项1:应为一个参数

您会得到一个列表,因为您将参数中的
nargs=1
设置为
add\u argument
。这一点也概述在:

请注意,
nargs=1
生成一个项目列表。这与默认情况不同,默认情况下,项目由自身生成

如果删除
nargs=1
,它应该根据需要自行生成项目(如果给定,则从参数中生成,否则从
默认值中生成)。如果您想使数字成为可选的(即也允许
-option1
不带参数),请使用
nargs='?'
并将
const
设置为该情况的默认值