Python argparse 在指定和未指定参数时有两个默认值

Python argparse with two defaults when the argument is and is not specified

参数-f,我要

  1. 在命令中未指定时使用默认值。
  2. 在命令中指定但未给出任何值时使用另一个默认值
  3. 允许用户为此参数提供单个或多个值

如果您只想为您的选项消耗一个值,那么您问题评论中的代码就足够了。

如果您希望选项有多个参数,则不能在 add_argument 中使用 const(nargs 需要 '?'),相反您可以使用 subclass Action class(在 argparse 中找到):

class FAction(argparse.Action):
    #The default to use in case the option is provided by
    #the user, you can make it local to __call__
    __default2 = 'def2'
    #__call__ is called if the user provided the option
    def __call__(self, parser, namespace, values, option_string=None):
        #If the option f is provided with no arguments
        #then use __default2 which is the second default
        #if values length is 0< then use what the user
        #has provided
        if len(values) == 0:
            values = self.__default2
        setattr(namespace, self.dest, values)

parser = argparse.ArgumentParser(description='Program arguments')
parser.add_argument('-f', default='def', nargs='*', action=FAction)

args = parser.parse_args()

print(args.f)