Erklärung zu ** + kwargs

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

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?
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

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]
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Ja hat schon geholfen.
Ich werde es halt einfach mal ein bisschen ausprobieren.
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
Antworten