Was bedeutet **kwds oder **kwargs bei Python?

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.
Antworten
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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
Zuletzt geändert von martinjo am Freitag 2. Dezember 2011, 10:22, insgesamt 1-mal geändert.
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.
"""
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Ein paar Worte auf deutsch wären nett, ich verstehe es immer noch nicht.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

**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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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)
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Jetzt habe ich es verstanden :D Vielen Dank!
Antworten