pass **kwargs argument an eine andere Funktion mit **kwargs

Verstehe ich nicht das folgende Beispiel, können sagen, ich habe diese Funktionen:

# python likes
def save(filename, data, **kwargs):
    fo = openX(filename, "w", **kwargs) # <- #1
    fo.write(data)
    fo.close()
# python doesnt like
def save2(filename, data, **kwargs):
    fo = openX(filename, "w", kwargs) # <- #2
    fo.write(data)
    fo.close()

def openX(filename, mode, **kwargs):
    #doing something fancy and returning a file object

Warum ist #1 die richtige Lösung und #2 falsch? **kwargs ist im Grunde ein dict, also Wenn ich will, zu überliefern, das argument zu openX ich denke der richtige Weg wäre, ohne ** und damit nur die dict. Aber python offensichtlich nicht, wie die zweite und sagt mir, ich gab 3 statt 2 Argumente.
So was ist der Grund dafür?

InformationsquelleAutor der Frage | 2012-03-26

Schreibe einen Kommentar