2016-05-27 28 views
3

Ich möchte eine Funktion schreiben, die verschiedene Schlüsselwortargumente an verschiedene Funktionen übergibt.So schreiben Sie eine Funktion, die verschiedene Schlüsselwortargumente an verschiedene Funktionen übergibt

Zum Beispiel möchte ich eine Funktion schreiben, die ein Histogramm meiner Daten darstellt, indem zuerst Achsen über gca erstellt und dann das Histogramm über hist hinzugefügt wird. Ich möchte, dass der Benutzer in der Lage ist, zusätzliche Schlüsselwortargumente sowohl an gca als auch an hist zu übergeben.

So etwas wie diese (Syntaxfehler in der Defintion Linie) ist das, was ich suche,

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

Wie würde Python wissen, welche Schlüsselwörter an jede Funktion übergeben werden? Vor allem wenn man bedenkt, dass 'inspect.signature (plt.gca) -> ' –

+0

Was ist das, was den Schlüsselwortargument definiert? – zondo

+0

@tadhg Das ist genau das Problem, das ich versuche zu lösen. Kann ich so etwas erreichen? – NewNameStat

Antwort

2

Ohne genau zu wissen, welche Keyword-Argumente zu jedem delegieren funktioniert die **keywords einfach nicht funktionieren wird in diesem Szenario können Sie zwei Wörterbücher stattdessen nehmen für die Schlüsselwörter zu jeder Funktion als Argumente:

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

und dann die einzelnen Wörterbücher machen, die Keyword-Syntax kann immer noch, indem sie an dieverwendet werden 0 Konstruktor:

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