Нет такого механизма. Существует предложение, 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_options
и plot_options
).
Обновление: Python 3.5 и 3.6 теперь являются основными и действительно поддерживают расширенный синтаксис распаковки на основе PEP-448.
>>> d = {'name': 'joe'}
>>> e = {'age': 20}
>>> { **d, **e }
{'name': 'joe', 'age': 20}
Это, однако, не сильно помогает в этом сценарии kwargs, предназначенном для нескольких адресатов. Даже если бы функция smoothy()
взяла унифицированный набор kwargs, вам нужно было бы определить, какие из них предназначены для каких подфункций. Грязный в лучшем случае. Несколько dict
параметров, один из которых предназначен для передачи каждой подфункции, принимающей kwarg, по-прежнему лучший подход.
person
Jonathan Eunice
schedule
23.10.2014
scatter
иplot
как обычныеdict
? Похоже, что это обязательные аргументы... затем используйте**scatter
или**plot
в функциях... вы больше ничего с ними не делаете - person Jon Clements♦   schedule 23.10.2014