返回

如何让 Argparse 的 `--help` 显示参数默认值?

python

在 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 输出中显示默认值吗?

除了本文中的方法之外,还可以使用第三方库或自定义脚本来显示默认值。