这个问题是关于非常有用的 argparse Python 库。
我们知道基本用法:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--useOptionA",help="activate the useOptionA option", action="store_true")
args=parser.parse_args()
print(args)
所以从逻辑上讲,如果我们这样做:
python program.py
Namespace(useOptionA=False)
python program.py --useOptionA
Namespace(useOptionA=True)
有道理吧?
我的问题是,在什么情况下(或如何)我们可以使用
action="store_false"
选项?
我试过了
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--noOptionB",help="do not usethe useOptionB option", action="store_false")
args=parser.parse_args()
print(args)
但后来我明白了
python program.py
Namespace(noOptionB=True)
python program.py --noOptionB
Namespace(noOptionB=False)
这是没有意义的,如果我想要的只是将变量
useOptionB
设置为真或假。
(除非,我必须做useOptionB = not args.noOptionB
,但感觉有点奇怪,不是吗)
替代方案也没有意义
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--useOptionC",help="activate the useOptionC option", action="store_false")
args=parser.parse_args()
print(args)
所以
python program.py
Namespace(useOptionC=True)
python program.py --useOptionC
Namespace(useOptionC=False)
在这种情况下,默认是使用选项 C,但“使用”的参数实际上会停用它。
我想这是一个语义问题,但是有人可以写一个例子来解释这个选项吗?
可以说
store_false
与 dest
结合时有意义,例如
...add_option("--quiet", action="store_false", dest=info)
它提供了更具可读性的代码:
if opts.info:
print("Now doing this")
...
if opts.info:
print("Now doing that")
(而不是
if not opts.quiet:
...)
使用 store_true 会有意义。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--useOptionC",help="activate the useOptionC option", action="store_true")
args=parser.parse_args()
print(args)