gpt4 book ai didi

python将不同的**kwargs传递给多个函数

转载 作者:IT老高 更新时间:2023-10-28 21:04:26 25 4
gpt4 key购买 nike

通过 python doc 和 stackoverflow,我了解了如何在我的 def 函数中使用 **kwargs。但是,我有一个案例需要两组 **kwargs 用于两个子功能。有人可以告诉我如何正确分离 **kwargs 吗?

这是我的目标:绘制点集和插值平滑曲线,
和我天真的示例代码:

def smoothy(x,y, kind='cubic', order = 3, **kwargs_for_scatter, **kwargs_for_plot):
yn_cor = interp1d(x, y, kind=kind, assume_sorted = False)
xn = np.linspace(np.min(x), np.max(x), len(x) * order)
plt.scatter(x,y, **kwargs_for_scatter)
plt.plot(xn, yn_cor(xn), **kwargs_for_plot);
return

感谢您的帮助。

最佳答案

没有这样的机制。有一个提议,PEP-448 ,由此 Python 3.5 及以下通用参数解包。 Python 3.4 和以前的版本不支持它。一般情况下你能做到的最好的:

def smoothy(x,y, kind='cubic', order = 3, kwargs_for_scatter={}, kwargs_for_plot={}):
yn_cor = interp1d(x, y, kind=kind, assume_sorted = False)
xn = np.linspace(np.min(x), np.max(x), len(x) * order)
plt.scatter(x,y, **kwargs_for_scatter)
plt.plot(xn, yn_cor(xn), **kwargs_for_plot);
return

然后将这些选项作为字典而不是 kwargs 传递给 smoothy

smoothy(x, y, 'cubic', 3, {...}, {...})

因为变量名称可能会暴露给调用者,所以您可能希望将它们重命名为更短的名称(可能是 scatter_optionsplot_options)。

更新:Python 3.5 和 3.6 现已成为主流,它们确实支持基于 PEP-448 的扩展解包语法。

>>> d = {'name': 'joe'}
>>> e = {'age': 20}
>>> { **d, **e }
{'name': 'joe', 'age': 20}

但是,这在 kwargs-intended-for-multiple-destinations 场景中没有多大帮助。即使 smoothy() 函数采用了统一的 kwargs 抓包,您也需要确定它们中的哪些用于哪些子函数。最好是凌乱。多个 dict 参数,一个用于传递给每个 kwarg-take 子函数的参数,仍然是最好的方法。

关于python将不同的**kwargs传递给多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26534134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com