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
在解析开始时为名称空间指定默认值。如果使用参数,则用户提供的值将分配给该名称空间属性,而不是写入默认值。换句话说,在解析过程中,用户提供的值将覆盖默认值。