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 :D Vielen Dank!