3

在 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模仿这种行为的正确方法是什么?

4

2 回答 2

3

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

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

位置参数占位符得到一个列表,关键字参数占位符得到一个字典。

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

def add_arguments(*posargs, **kwargs):
    if 'action' in kwargs:
        # do something
于 2010-12-15T03:07:46.857 回答
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 。

于 2010-12-15T03:02:04.923 回答