在Python3中使用kwargs处理函数

时间:2015-12-29 19:05:22

标签: python-3.x kwargs

这是示例代码不起作用。

#!/usr/bin/env python3
def foobar(name, handlerFunction, **handlerArgs):
    handlerFunction(name=name, handlerArgs)


def _doSomething(name, **kwargs):
    print(name)
    print(kwargs)


if __name__ == '__main__':
    foobar(name='foo', handlerFunction=_doSomething)
    sys.exit()

这里的要点是_doSomething应该是可以交换的。有时只有一个参数name,但有时会有一个以上。

我有这样的错误。

  File "./kwargs.py", line 4
    handlerFunction(name=name, handlerArgs)
                                  ^
SyntaxError: non-keyword arg after keyword arg

或者当我重新排列参数的顺序时

  File "./kwargs.py", line 13, in <module>
    foobar(name='foo', handlerFunction=_doSomething)
  File "./kwargs.py", line 4, in foobar
    handlerFunction(handlerArgs, name=name)
TypeError: _doSomething() got multiple values for argument 'name'

1 个答案:

答案 0 :(得分:2)

在致电handlerArgs时,d handlerFunction中的

Unpack the arguments

handlerFunction(name=name, **handlerArgs)