gpt4 book ai didi

python - 如果另一个互斥参数为真,则将默认值设置为假

转载 作者:太空狗 更新时间:2023-10-29 18:19:26 25 4
gpt4 key购买 nike

我意识到这很像 Setting default option in Python of two mutually exclusive options using the argparse module尽管从不同的角度来看(那里给出的答案似乎没有帮助)。

代码块(parser是argparse.ArgumentParser的一个实例):

mutex_group = parser.add_mutually_exclusive_group()
mutex_group.add_argument("--show", action="store_true",
dest="show", default=True)
mutex_group.add_argument("--insert", action="store_true",
dest="insert")

opts = parser.parse_args()

如果未指定 --show--insert 我想默认为 --show (因此 default= True) 但如果使用 --insertopts.show 仍然设置为 true(因为默认设置),尽管它是互斥 block 的一部分.

当前代码在测试 opt.show 是否为 True 时检查没有设置其他选项,即:

if opts.show and not opts.insert:
do_something()
elif opts.insert:
do_something_else()

但这并不能扩展(当您将 --delete 添加到互斥组时会发生什么,等等)所以我正在寻找一种更好的方法来使所有其他变量opts.show false,但仍将其作为默认值。

阅读 argparse 文档,我认为自定义操作是可行的方法,但看不到如何从中访问互斥组的其他成员(理论上我可以迭代它们,然后翻转如果设置了其余任何一项,则为默认值)。另一种选择是反转 if 条件,但这似乎不干净(如果默认更改,则 if 语句的顺序也必须更改)。

最佳答案

我突然想到,'store_const' 可能是更合适的操作(所有参数都指向相同的目的地)。

import argparse
parser = argparse.ArgumentParser()
mutex_group = parser.add_mutually_exclusive_group()
mutex_group.add_argument("--show", action="store_const",
dest="mutex", const="show")
mutex_group.add_argument("--insert", action="store_const",
dest="mutex", const="insert")
mutex_group.add_argument('--delete', action="store_const",
dest="mutex", const="delete")


parser.set_defaults(mutex='show')
args = parser.parse_args()
print(args)

现在您可以使用 args.mutex 来确定要执行的操作。

关于python - 如果另一个互斥参数为真,则将默认值设置为假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12303547/

25 4 0