我有一个简单的函数,就像这样调用:
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)
答案 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实例中工作。