On Mon, 2009-08-03 at 19:59 +0000, kj wrote: > > I want to write a decorator that, among other things, returns a > function that has one additional keyword parameter, say foo=None. > > When I try > > def my_decorator(f): > # blah, blah > def wrapper(*p, foo=None, **kw): > x = f(*p, **kw) > if (foo): > # blah, blah > else > # blah blah > return wrapper > > ...i get a syntax error where it says "foo=None". I get similar > errors with everything else I've tried. >
Not exactly sure what you're trying to do.. but, regular arguments must be used *before* positional and keyword arguments so the definition: def wrapper(*p, foo=None, **kw): is syntactically incorrect whereby the following is correct: def wrapper(foo=None, *p, **kw): But if what you are wanting is to actually add 'foo' to kw then I would do this: def my_decorator(f): # blah, blah def wrapper(*p, **kw): if 'foo' not in kw: kw['foo'] = None x = f(*p, **kw) if kw['foo']: # blah blah else: # blah blah return wrapper -- http://mail.python.org/mailman/listinfo/python-list