Seite 1 von 1

*args und **kwargs an weitere funktion weitergeben

Verfasst: Montag 17. Juli 2006, 18:28
von glurps
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)

Verfasst: Montag 17. Juli 2006, 20:51
von Masaru
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<<

Verfasst: Montag 17. Juli 2006, 23:50
von glurps
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.

Verfasst: Dienstag 18. Juli 2006, 13:27
von Masaru
Öh ... *g* oh sorry, hatte den Edit nicht gesehen ... nichts für ungut ;).