如何让 Argparse 的 `--help` 显示参数默认值?
2024-03-11 12:52:46
在 Argparse 的 --help
中显示默认值
简介
Argparse 是 Python 中一个广泛使用的命令行参数解析库。默认情况下,它不会在 --help
输出中显示参数的默认值。这可能会给用户带来不便,尤其是当他们需要知道某个参数的默认值时。本文将介绍三种方法来在 --help
输出中显示默认值。
方法 1:覆盖 help
格式器
我们可以创建一个自定义的 HelpFormatter
子类并覆盖 _get_default_metavar
方法。在这个方法中,我们可以返回包含默认值的元变量字符串。这种方法提供了最大的灵活性,但也需要更深入的了解 Argparse 的内部机制。
方法 2:使用 metavar
参数
我们可以使用 metavar
参数来指定一个元变量字符串,其中包含默认值。这种方法相对简单,但它只允许指定一个默认值。
方法 3:使用 default_value
参数(仅限 Python 3.9 及更高版本)
从 Python 3.9 开始,Argparse 引入了 default_value
参数,允许我们显式指定要显示的默认值。这种方法是最简洁的,但它只适用于 Python 3.9 及更高版本。
选择最佳方法
选择哪种方法取决于你的具体需求。如果需要最大的灵活性,可以使用覆盖 help
格式器的方法。如果只需要指定一个默认值,可以使用 metavar
参数。如果使用的是 Python 3.9 及更高版本,可以使用 default_value
参数。
示例代码
以下是如何使用每种方法在 --help
输出中显示默认值的示例代码:
方法 1:覆盖 help
格式器
class MyHelpFormatter(argparse.HelpFormatter):
def _get_default_metavar(self, action):
if action.default is not None:
return f"[{action.default}]"
else:
return super()._get_default_metavar(action)
parser = argparse.ArgumentParser(formatter_class=MyHelpFormatter)
方法 2:使用 metavar
参数
parser.add_argument('--scan-time',
action='store',
nargs='?',
type=int,
default=5,
help="Wait SCAN-TIME seconds between status checks.",
metavar="[default: 5]")
方法 3:使用 default_value
参数(Python 3.9 及更高版本)
parser.add_argument('--scan-time',
action='store',
nargs='?',
type=int,
default=5,
help="Wait SCAN-TIME seconds between status checks.",
default_value=5)
结论
在 Argparse 的 --help
输出中显示默认值是一个有用的功能,因为它可以帮助用户了解参数的默认值。可以通过覆盖 help
格式器、使用 metavar
参数或使用 default_value
参数(仅限 Python 3.9 及更高版本)来实现此目的。根据你的特定需求选择最佳方法。
常见问题解答
1. 为什么默认情况下 Argparse 不会显示默认值?
这主要是为了保持输出整洁和一致。如果所有参数都显示默认值,--help
输出可能会变得很长和混乱。
2. 我可以自定义显示的默认值吗?
使用覆盖 help
格式器的方法,你可以自定义显示的默认值。
3. 我可以在 Python 3.8 及更低版本中使用 default_value
参数吗?
不,default_value
参数仅在 Python 3.9 及更高版本中可用。
4. 我如何将我的自定义 HelpFormatter
设置为默认格式器?
你可以通过将 formatter_class
参数传递给 ArgumentParser
构造函数来设置自定义 HelpFormatter
为默认格式器。
5. 还有其他方法可以在 --help
输出中显示默认值吗?
除了本文中的方法之外,还可以使用第三方库或自定义脚本来显示默认值。