*args und **kwargs an weitere funktion weitergeben

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
glurps
User
Beiträge: 2
Registriert: Samstag 17. Juni 2006, 13:11

Montag 17. Juli 2006, 18:28

ich möchte einen wrapper um eine funktion schreiben, die * und ** argumente hat. die beiden folgenden varianten scheinen nicht zu funktionieren. wie kann ich die liste und den dictionary ohne allzuviel aufwand expandieren; am liebsten gleich im aufruf von function().

Code: Alles auswählen

def wrapper(*args, **kwargs):
        self.function(args, kwargs)
#        self.function(*args, *kwargs)
        
def function(*args, **kwargs):
        pass

edit: sry actually this works:

Code: Alles auswählen

self.function(*args, *kwargs)
Zuletzt geändert von glurps am Montag 17. Juli 2006, 23:46, insgesamt 1-mal geändert.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Montag 17. Juli 2006, 20:51

Hallo glurps,

könntest du mehr über dein Ziel schreiben?

Momentan sehe ich lediglich ein Beispiel welches in der 2. Variante funktionieren würde. Hier ein wenig erweitert um die Logik genauer dahinter hervorzuheben:

Code: Alles auswählen

>>> def wrapper(titel, *args, **kwargs):
...    function(titel, *args, *kwargs)
       
>>> def function(titel, *args, **kwargs):
...    print titel
...    print args
...    print kwargs
*args schlürft alle Argumente in ein Tupel ein ein, die nach der ersten definierten Variable 'titel' folgen und keine Keywordargumente (z.B.: a='mit') sind. Die Keywordargumente sind dann die *kwargs

Code: Alles auswählen

>>> wrapper('==Test==', 'ein', 'test', a='mit', b='args', c='und ', d='kwargs')
==Test==
('ein', 'test')
{'a': 'mit', 'b': 'args', 'c': 'und ', 'd': 'kwargs'}
Wenn's das nicht ist was du möchtest, was ist es dann?

Gruß,
>>Masaru<<
glurps
User
Beiträge: 2
Registriert: Samstag 17. Juni 2006, 13:11

Montag 17. Juli 2006, 23:50

erm, ja die zweite variante funktioniert. ich hatte das posting noch editiert als ich das bemerkt habe, aber leider nicht abgesendet.

sry, und danke für die antwort.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Dienstag 18. Juli 2006, 13:27

Öh ... *g* oh sorry, hatte den Edit nicht gesehen ... nichts für ungut ;).
Antworten