def type_check(*fargs): print 'decorator arguments', fargs def wrapper(*args): print 'function arguments', args if len(fargs)<>len(args): raise IndexError, 'Argument count mismatch' for i in range(len(args)): if type(args[i])<>fargs[i]: raise TypeError, 'Parameter type mismatch - paramater %s' % i return func(*args) return wrapper @type_check(type(0), type(0)) def test(a, b): print a + b