>def define(func): > if not ENABLE_TYPECHECKING: > return lambda func: func > # else decorate func
A small correction: The argument of the decorator is not 'func' but the parameter checks you want to enforce. A template for define would be: def define(inputTypes, outputType): if not ENABLE_TYPECHECKING: return lambda func: func def decorate(func): def typecheckedFunc(*args,**kwds): ##### TYPECHECK *args, **kwds HERE ##### r = func(*args,**kwds) ##### TYPECHECK r HERE ##### return r return typecheckedFunc return decorate Depending on how much flexibility you allow in inputTypes, filling in the typechecking logic can be from easy to challenging. For example, does typechecking have to be applied in all arguments or you allow non-typechecked aruments ? Can it handle *varargs and **kwdargs in the original function ? An orthogonal extension is to support 'templated types' (ala C++), so that you can check if something is 'a dict with string keys and lists of integers for values'. I would post my module here or the cookbook but at 560 (commented) lines it's a bit long to qualify for a recipe :-) George -- http://mail.python.org/mailman/listinfo/python-list