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

时间:2010-12-15 02:47:48

标签: python argparse

在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 个答案:

答案 0 :(得分:3)

Python的参数定义顺序是......

  1. 必需和/或默认值参数(如果有)
  2. 可变长度位置参数占位符(如果需要,*<name>
  3. 关键字参数占位符(如果需要,**<name>
  4. 位置参数占位符获取一个列表,关键字参数占位符获取一个字典。

    add_arguments只是在关键字参数的字典中查找键,而不是在声明中拼写出所有可能的参数。有些东西......

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

答案 1 :(得分: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