**kwargs = {}. Warum?

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.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

**kwargs = {}. Warum?

Beitragvon sape » Mittwoch 6. Dezember 2006, 16:47

Code: Alles auswählen

>>> def foo(*args, **kwargs):
...     print args, kwargs
...     
>>> foo(1, 2, 3)
(1, 2, 3) {}


Sollten mir nicht normalerweise die Keywords bei ``kwargs`` angezeigt werden :? ein ``*`` vor kwargs bringt folgenden Traceback:

Code: Alles auswählen

def foo(*args, **kwargs):
    print args, *kwargs
  File "<input>", line 2
    print args, *kwargs
                ^
SyntaxError: invalid syntax


lg
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 6. Dezember 2006, 16:54

Du hast keine keywords angegeben. So geht es:

Code: Alles auswählen

>>> def foo(*args, **kwargs):
...      print args, kwargs
...
>>> foo(1, 2, 3, bla=5, blupp=7)
(1, 2, 3) {'bla': 5, 'blupp': 7}
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Mittwoch 6. Dezember 2006, 16:54

Sollten mir nicht normalerweise die Keywords bei ``kwargs`` angezeigt werden Confused ein ``*`` vor kwargs bringt folgenden Traceback:


Das Verursacht diesen Fehler, weil der Stern da syntaktisch falsch ist. print ist keine Funktion.

Sofern du dir eine Liste der übergebenen Keys (nicht der Werte) anzeigen lassen möchtest (denn nur diese übergibt tut *kwags bei funktionen), so ginge das so:

Code: Alles auswählen

print args, kwargs.keys()
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 6. Dezember 2006, 17:01

Danke für die Antworten.

Gibt es eine Möglichkeit das die Funktion ohne Keywords erkennt wie die Variablen heißen die übergeben wurden?

Code: Alles auswählen

def foo(*args, **kwargs):
    print args, kwargs

a=1
b=2
c=3
print foo(a, b, c)


lg
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 6. Dezember 2006, 17:06

XtraNine hat geschrieben:Gibt es eine Möglichkeit das die Funktion ohne Keywords erkennt wie die Variablen heißen die übergeben wurden?


Argh. Es werden da keine Variablen übergeben, sondern Objekte. Und die haben keinen Namen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Mittwoch 6. Dezember 2006, 17:09

wenn du innerhalb einer Funktion etwas über den Aufrufer wissen willst, bist du zu 99% bei einem falschen Design.
Der Witz an Funktionen ist ja gerade, dass sie (im idealfall) unabhängig vom Rest funktionieren.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 6. Dezember 2006, 17:14

Ok, danke keppla. Ich werde das Konzept nochmal überarbeiten.

Birkenfeld, ja hast recht. Ich meinte ja auch Objekte. In Python ist ja alles ein Objekt. Ab und zu passiert es mir aber noch das ich "Variablen" als solche und nicht als Objekte betrachte. Das wird sich aber auch mit der Zeit legen ^^

lg
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Beitragvon Ene Uran » Freitag 8. Dezember 2006, 09:03

Wie gesagt, du kannst das ja so machen:

Code: Alles auswählen

def foo(*args, **kwargs):
    print args, kwargs

foo(a=1, b=2, c=3)

"""
() {'a': 1, 'c': 3, 'b': 2}
"""
Atomkraftwerkaktienbesitzer

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder