--option 和 nargs='?' 有什么区别?在 Python 的 argparse 模块中?

What's the difference between --option and nargs='?' in Python's argparse module?

阅读了有关 argparse 的文档后,我很难看出最后两行代码之间的区别:

parser = argparse.ArgumentParser()
parser.add_argument('--option')
parser.add_argument('option', nargs='?')

两者都指定了可以传递给解析器的可选参数,但为什么要使用一个而不是另一个呢?

任何以 --- 开头的参数都可以按任何顺序使用(如 **kwargs),而没有破折号前缀的参数称为位置参数(如*args).

必须按照定义的顺序提供位置参数。使用 nargs='?' 的一个很好的例子是提供一种将脚本结果重定向到文件的方法。您将最后一个参数指定为可选的目标文件,如果未提供该选项,则输出将简单地写入 stdout.

从约定的角度来看,您可以将前缀参数视为可选标志,而位置参数是必需的。