I am new to Python and Django, was going through the concept of decorators where I came across a special case of using arguments with decorators Below is the code for memoization where I was looking at the concept...
cache = {} def get_key(function, *args, **kw) : key = '%s. %s: ' % (function. __module__,function. __name__) hash_args = [ str(arg) for arg in args] hash_kw = [' %s: %s' % (k, hash(v) ) for k, v in kw.items() ] return ' %s:: %s: : %s' % (key, hash_args, hash_kw) def memoize(get_key=get_key, cache=cache) : def _memoize( function) : print function def __memoize(*args, **kw) : key = get_key(function, *args, **kw) try: return cache[key] except KeyError: cache[key] = function( *args, **kw) return cache[key] return __memoize return _memoize @memoize() def factory(n) : return n * n # testcase #print factory(3) # # coming across to certain views from people, it is not a good practice to use decorators with arguments (i.e. @memoize() ) and instead it is good to just use @memoize. Can any of you guys explain me advantages and disadvantages of using each of them -- http://mail.python.org/mailman/listinfo/python-list