gpt4 book ai didi

python - 您可以将关键字参数而不是位置参数传递给 argparse 吗?

转载 作者:行者123 更新时间:2023-11-28 22:00:35 25 4
gpt4 key购买 nike

假设你有一个 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')

你或许可以通过使用 mutually exclusive groupings 来解决这个问题

关于python - 您可以将关键字参数而不是位置参数传递给 argparse 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14585722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com