你能把关键字参数而不是位置参数传递给 argparse 吗?



假设你有一个python函数,如下所示:

def foo(spam, eggs, ham):
    pass

你可以只使用位置参数(foo(1, 2, 3))来调用它,但你也可以明确地说foo(spam=1, eggs=2, ham=3),或者混合两者(foo(1, 2, ham=3))。

是否可以使用 argparse 获得相同的功能?我有几个带有关键字的位置参数,我不想在仅使用一个关键字时定义所有参数。

你可以做这样的事情:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('foo',nargs='?',default=argparse.SUPPRESS)
parser.add_argument('--foo',dest='foo',default=None)
parser.add_argument('bar',nargs='?',default=argparse.SUPPRESS)
parser.add_argument('--bar',dest='bar',default=None)
parser.add_argument('baz',nargs='?',default=argparse.SUPPRESS)
parser.add_argument('--baz',dest='baz',default=None)
print parser.parse_args()

它主要按照您的描述工作:

temp $ python test.py 1 2 --baz=3
Namespace(bar='2', baz='3', foo='1')
temp $ python test.py --baz=3
Namespace(bar=None, baz='3', foo=None)
temp $ python test.py --foo=2 --baz=3
Namespace(bar=None, baz='3', foo='2')
temp $ python test.py 1 2 3
Namespace(bar='2', baz='3', foo='1')

Python 会在函数调用类比中给你下一个错误,但 argparse 会允许它:

temp $ python test.py 1 2 3 --foo=27.5
Namespace(bar='2', baz='3', foo='27.5')

您可以通过使用互斥分组来解决此问题

你也可以使用这个模块:docopt

我相信

这就是你要找的 Argparse 默认值

相关内容

  • 没有找到相关文章

最新更新