Using decorators with argument in Python
Jigar Tanna
poisonousrattle5 at gmail.com
Tue Jun 28 12:52:11 EDT 2011
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
More information about the Python-list
mailing list