argparse的add_argument如何在关键字参数之前接受可变长度参数?

3 投票
2 回答
1085 浏览
提问于 2025-04-16 08:33

在python2.7中,argparse模块有一个叫做add_argument的方法,这个方法可以在它的关键字参数之前接收不定数量的未命名参数,下面是个例子:

parser = argparse.ArgumentParser(description='D')
parser.add_argument('-a', '-b', ... '-n', action='store', ... <other keyword args>)

据我所知,下面这种函数定义是行不通的:

def fxn(var_args*, action, otherstuff):
def fxn(action, otherstuff, var_args*): # results in conflict on action

那么,怎样才能正确模拟add_argument的行为呢?

2 个回答

2

你可以给一个函数传递任意数量的参数。

下面是一个例子:

def f(x, *args, **kwargs):
    print x
    for arg in args:
        print arg
    for key, value in kwargs:
        print key + ': ' + value

阅读这个链接会对你有帮助:http://docs.python.org/tutorial/controlflow.html#keyword-arguments

3

Python中参数的定义顺序是这样的:

  1. 必需的参数和/或默认值参数(如果有的话)
  2. 可变长度的位置参数占位符(如果需要,可以用*<name>来表示)
  3. 关键字参数占位符(如果需要,可以用**<name>来表示)

位置参数占位符接收一个列表,而关键字参数占位符接收一个字典。

add_arguments这个函数只是查找关键字参数字典中的键,而不是在声明时列出所有可能的参数。大概是这样的...

def add_arguments(*posargs, **kwargs):
    if 'action' in kwargs:
        # do something

撰写回答