Seite 1 von 1

**kwargs = {}. Warum?

Verfasst: Mittwoch 6. Dezember 2006, 16:47
von sape

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

Verfasst: Mittwoch 6. Dezember 2006, 16:54
von Rebecca
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}

Verfasst: Mittwoch 6. Dezember 2006, 16:54
von keppla
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()

Verfasst: Mittwoch 6. Dezember 2006, 17:01
von sape
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

Verfasst: Mittwoch 6. Dezember 2006, 17:06
von birkenfeld
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.

Verfasst: Mittwoch 6. Dezember 2006, 17:09
von keppla
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.

Verfasst: Mittwoch 6. Dezember 2006, 17:14
von sape
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

Verfasst: Freitag 8. Dezember 2006, 09:03
von Ene Uran
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}
"""