在 Python3 中使用 kwargs 作为处理函数

Using kwargs for handlers functions in Python3

这是示例代码不起作用。

#!/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'

Unpack the arguments 在 dict 中,handlerArgs,当调用 handlerFunction:

handlerFunction(name=name, **handlerArgs)