argparse的add_argument如何在关键字参数之前接受可变长度参数?
在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中参数的定义顺序是这样的:
- 必需的参数和/或默认值参数(如果有的话)
- 可变长度的位置参数占位符(如果需要,可以用
*<name>
来表示) - 关键字参数占位符(如果需要,可以用
**<name>
来表示)
位置参数占位符接收一个列表,而关键字参数占位符接收一个字典。
add_arguments
这个函数只是查找关键字参数字典中的键,而不是在声明时列出所有可能的参数。大概是这样的...
def add_arguments(*posargs, **kwargs):
if 'action' in kwargs:
# do something