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

Erklärung zu ** + kwargs

Beitragvon hehejo » Mittwoch 24. August 2005, 11:48

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
ascii stupid question,
get stupid ansii

http://www.hehejo.de
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Mittwoch 24. August 2005, 11:58

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#SECTION006720000000000000000

Gruss

PS: kannst args oder kwargs auch anders betiteln -> *lala oder so :D[/url]
Benutzeravatar
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Beitragvon hehejo » Mittwoch 24. August 2005, 12:06

Ja hat schon geholfen.
Ich werde es halt einfach mal ein bisschen ausprobieren.
Gruß, Johannes

ascii stupid question,
get stupid ansii


http://www.hehejo.de

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]