Seite 1 von 1
Was bedeutet **kwds oder **kwargs bei Python?
Verfasst: Freitag 2. Dezember 2011, 10:11
von martinjo
Hi
Ich bin Anfänger und habe nun schon öfters **kwds oder **kwargs in irgend welchen Beispielen gelesen, z.B. für CSV-Export:
Code: Alles auswählen
class UnicodeWriter:
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
Muss ich das ersetzen (Platzhalter) oder holt es sich dafür automatisch Werte?
Danke
Re: Was bedeutet **kwds bei Python?
Verfasst: Freitag 2. Dezember 2011, 10:22
von deets
http://docs.python.org/reference/expressions.html#calls
"""
If any keyword argument does not correspond to a formal parameter name, a TypeError exception is raised, unless a formal parameter using the syntax **identifier is present; in this case, that formal parameter receives a dictionary containing the excess keyword arguments (using the keywords as keys and the argument values as corresponding values), or a (new) empty dictionary if there were no excess keyword arguments.
"""
Re: Was bedeutet **kwds oder **kwargs bei Python?
Verfasst: Freitag 2. Dezember 2011, 10:25
von martinjo
Ein paar Worte auf deutsch wären nett, ich verstehe es immer noch nicht.
Re: Was bedeutet **kwds oder **kwargs bei Python?
Verfasst: Freitag 2. Dezember 2011, 10:45
von cofi
**name hat 2 Aufgaben:
- In einer Funktionsdefinition sammelt es alle uebergebenen (und nicht explizit als Paramter angebenen) Keyword-Argumente (name=wert) ein
- und sonst entpackt es ein Dictionary so, dass eine Funktion die Keyword-Argumente erwartet auch solche bekommt
Mehr gibt es im Tutorial ab 4.7:
http://tutorial.pocoo.org/controlflow.h ... n-funktion
Re: Was bedeutet **kwds oder **kwargs bei Python?
Verfasst: Freitag 2. Dezember 2011, 11:01
von /me
martinjo hat geschrieben:Ein paar Worte auf deutsch wären nett, ich verstehe es immer noch nicht.
Schau dir einfach den folgenden Code an und lass ihn laufen.
Code: Alles auswählen
def test_keywords(**kwargs):
print(kwargs)
test_keywords(hallo='wert1', param=23)
Und dann diesen:
Code: Alles auswählen
def test_more(*args, **kwargs):
print(args)
print(kwargs)
test_more(42, hallo='wert1', param=23)
Re: Was bedeutet **kwds oder **kwargs bei Python?
Verfasst: Freitag 2. Dezember 2011, 13:13
von martinjo
Jetzt habe ich es verstanden

Vielen Dank!