Python argparse—;找出是否提供了参数或使用了默认值

Python argparse—;找出是否提供了参数或使用了默认值,python,python-3.x,argparse,command-line-arguments,Python,Python 3.x,Argparse,Command Line Arguments,如何知道argparse返回的参数是在命令行上给出的,还是使用了默认值 在下面的代码中,我想知道args使用了默认值,但是args2没有,尽管提供的值与默认值相同 import argparse parser = argparse.ArgumentParser() parser.add_argument('--khram', '-k', nargs='?', default='wawawiwa') args = parser.parse_args([]) args2 = parser.par

如何知道
argparse
返回的参数是在命令行上给出的,还是使用了默认值

在下面的代码中,我想知道
args
使用了默认值,但是
args2
没有,尽管提供的值与默认值相同

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--khram', '-k', nargs='?', default='wawawiwa')

args = parser.parse_args([])
args2 = parser.parse_args(['-kwawawiwa'])

我们可以看到,
args
args2
是无法区分的:

>>> args == args2
True
>>> args.khram == args2.khram
True
>>> args._get_args() == args2._get_args()
True
>>> args._get_kwargs() == args2._get_kwargs()
True

不确定您试图实现什么,但如果您将
nargs
更改为
nargs=argparse.rements
,则
args.khram
等于
[]
args2.khram
等于
['wawawiwa']
选择不同的默认值作为哨兵,然后对参数值进行后期处理,以“真实”默认值替换sentinel。如果希望默认值的行为与
'wawawiwa'
不同,则不要使用
'wawawiwa'
作为默认值。默认值
默认值
。用户无法提供该值。因此
如果args.khram为None:
是一个安全的测试
parse_args
确实维护了一个
seen_actions
列表,但它是函数的本地列表,您无法使用。
args
名称空间是您唯一需要使用的。作为一个细节点
parse_args
在解析开始时为名称空间指定默认值。如果使用参数,则用户提供的值将分配给该名称空间属性,而不是写入默认值。换句话说,在解析过程中,用户提供的值会覆盖默认值。不确定您试图完成什么,但如果您将
nargs
更改为
nargs=argparse.rements
,则
args.khram
等于
[]
args2.khram
等于
['wawawiwa']
选择一个不同的默认值用作sentinel,然后对参数值进行后处理,以“真实”默认值替换sentinel。如果希望默认值与
'wawawiwa'
的行为不同,则不要使用
'wawawawiwa'
作为默认值。默认值
默认值
。用户无法提供该值。因此
如果args.khram为None:
是一个安全的测试
parse_args
确实维护了一个
seen_actions
列表,但它是函数的本地列表,您无法使用。
args
名称空间是您唯一需要使用的。作为一个细节点
parse_args
在解析开始时为名称空间指定默认值。如果使用参数,则用户提供的值将分配给该名称空间属性,而不是写入默认值。换句话说,在解析过程中,用户提供的值将覆盖默认值。