参数标志,不使用时为空,不使用时为默认值

Posted

技术标签:

【中文标题】参数标志,不使用时为空,不使用时为默认值【英文标题】:Argument flag that is null when not used and default value when used without argument 【发布时间】:2020-10-26 00:25:45 【问题描述】:

我正在使用 argparse 来解析参数。我想要一个标志,在不使用时为NULL,在不使用参数时使用foo,在使用参数时使用参数值。

ap = argparse.ArgumentParser(description='test')
ap.add_argument('--bar', action='store_true')
args = ap.parse_args()

以上代码是我目前拥有的。

我希望python test.py 拥有ap.bar=Nonepython test.py --bar 拥有ap.bar=foo,而python test.py --bar ctest 拥有ap.bar=ctest。我会修改什么来发生这种情况?

【问题讨论】:

没有NULL 这样的东西。你的意思是None 这记录在nargs='?', docs.python.org/3/library/argparse.html#nargs 【参考方案1】:

我假设您的意思是 None 而不是 NULL

你可以这样做:

import argparse

ap = argparse.ArgumentParser(description='test')
ap.add_argument('--bar', nargs='?', const='foo')
args = ap.parse_args()

print(args.bar)

这给出了:

$ python3 test.py
None

$ python3 test.py --bar
foo

$ python3 test.py --bar ctest
ctest

作为一种可能的助记符,nargs='?' 语法(表示零或一)类似于正则表达式中? 的用法。

【讨论】:

如果我尝试使用这个like this 运行多个标志,那么它会将所有其他标志计为第一个标志的参数。有没有简单的方法来解决这个问题? @user760900 请您举例说明您想使用什么命令行,以及您希望如何解释它。 我意识到应该是a separate question @user760900 很公平,我可以看看。

以上是关于参数标志,不使用时为空,不使用时为默认值的主要内容,如果未能解决你的问题,请参考以下文章

函数参数的扩展

EditText android:text 设置的默认值运行的时候为空并且不能滚动

发布 dacpac(SSDT 数据库项目)时为数据库配置初始大小和自动增长大小的默认值

函数参数的扩展

函数参数相关(默认参数,占位参数)

如何在用户首次安装应用程序时为用户提供默认密码?