2016-05-27 7 views
3

Я хотел бы написать функцию, которая передает разные аргументы ключевых слов различным функциям.Как написать функцию, которая передает разные аргументы ключевых слов для разных функций

Например, я хочу написать функцию, которая отображает гистограмму моих данных, сначала создавая оси через gca, а затем добавляя гистограмму через hist. Я хотел бы, чтобы пользователь мог передавать дополнительные аргументы ключевых слов как gca, так и hist.

Что-то вроде этого (ошибки синтаксиса в Defintion линии) является то, что я ищу,

import matplotlib.pyplot as plt 

def plot_hist(data, **kwargs_hist, **kwargs_gca): 
    ax = plt.gca(**kwargs_gca)  
    fig = ax.hist(data, **kwargs_hist)[0] 
    return fig 
+1

Как бы знать, какие ключевые слова будут передаваться каждой функции? Особенно учитывая, что 'inspect.signature (plt.gca) -><Подпись (** kwargs)>' –

+0

Что определяет, где идет аргумент ключевого слова? – zondo

+0

@tadhg Это именно та проблема, которую я пытаюсь решить. Могу ли я выполнить что-то подобное? – NewNameStat

ответ

2

Не зная точно, какие ключевое слово аргументов делегировать каждую функцию **keywords просто не будет работать в этом случае, вы можете вместо этого взять два словаря для ключевых слов для каждой функции в качестве аргументов:

def plot_hist(data, kwargs_hist={}, kwargs_gca={}): 
    ax = plt.gca(**kwargs_gca)  
    fig = ax.hist(data, **kwargs_hist)[0] 
    return fig 

, а затем сделать отдельные словари, синтаксис ключевых слов по-прежнему можно использовать, передавая их в dict constructor:

plot_hist(DATA, dict(hist_arg=3, foo=6), dict(gca_arg=1, bar = 4))