Seite 1 von 1

Erklärung zu ** + kwargs

Verfasst: Mittwoch 24. August 2005, 11:48
von hehejo
Ich habe in einem Posting das hier gesehen (und natürlich auch gleich ausprobiert).

Code: Alles auswählen

>>> def foo(a,b,c):
	print a, b, c
	
>>> d = {"a":"A", "b":"B","c":"C"}
>>> foo(**d)
A B C
>>> foo(*d)
a c b
>>>
So wie ich das sehe, kommt man mit * an die Schlüssel und mit ** an die Werte.
Aber ein pures "print *d" klappt ja nicht.
Was passiert da also genau, und warum werden bei foo(*d) c und b vertauscht?


Wenn ich grad beim Fragen bin:
Was hat es eigentlich mit dem *kwargs auf sich?

Verfasst: Mittwoch 24. August 2005, 11:58
von rayo
Hi

Das ist weil bei foo(**d) werden die Werte anhand der Keys an die Parameter zugewiesen parameter a ist dict['a'], b ist dict['b'], c ist dict['c']

und bei der variante foo(*d) werden die keys als normale liste übergeben und enpackt -> d.keys()[0] = a, d.keys()[1] = b, d.keys()[2] = c

foo(*d) ist gleich wie foo(*d.keys()) weil bei dicts ohne angabe die keys zurückgegeben werden.

Hoffetlich war das jetzt verständlich :D

sonst Frag nochmals

zu *args = liste wird über den parameter enpackt (wie bei x,y=5,1)
bei **kwargs werden die parameter anhand der keys definiert.

guckst du hier :D
http://docs.python.org/tut/node6.html#S ... 0000000000

Gruss

PS: kannst args oder kwargs auch anders betiteln -> *lala oder so :D[/url]

Verfasst: Mittwoch 24. August 2005, 12:06
von hehejo
Ja hat schon geholfen.
Ich werde es halt einfach mal ein bisschen ausprobieren.