函数调用中的多个kwargs?

时间:2016-08-09 21:23:43

标签: python

我有一个简单的函数,就像这样调用:

arbitrary_function(**kwargs1, **kwargs2, **kwargs3)

似乎在我的本地安装(python 3.5.1)上编译正常,但是当我在带有python 3.4.5的docker上编译它时抛出一个SyntaxError。

我不太清楚为什么会出现这种行为。是不是允许多个kwargs?我应该在传递功能之前将它们组合起来吗单独传递它们更方便,例如:

plot(**x_axis_params, **y_axis_params, **plot_params)

而不是

params = dict()

for specific_param in [x_axis_params, y_axis_params, plot_params]:    
    params.update(specific_param)

plot(**params)

2 个答案:

答案 0 :(得分:2)

这是Python 3.5中引入的新功能。如果你必须支持Python 3.4,你基本上坚持使用update循环。

人们对如何将多个dicts组合成一个有自己喜欢的变化,但唯一一个真正比update循环更重要的是3.5 +独占,所以它没有'帮助这个。 (作为参考,新的字典合并语法为{**kwargs1, **kwargs2, **kwargs3}。)

答案 1 :(得分:0)

一种解决方法mentioned in the rationale for PEP448(介绍了Python功能)是使用collections.ChainMap

from collections import ChainMap

plot(**ChainMap(x_axis_params, y_axis_params, plot_params))

ChainMap是在Python 3.3中引入的,所以它应该在您的docker实例中工作。