On 04/27, Makoto Kuwata wrote: > > I feel that function decorator having arguments is complicated, > because three 'def' are nested: > > def multiply(n): > def deco(func): > def newfunc(*args, **kwargs): > return n * func(*args, **kwargs) > return newfunc > return deco
When I have to write an argument-taking decorator, I use a class: class multiply(object): # don't need 'object in 3.x' def __init__(self, n): self.n = n def __call__(self, func): def newfunc(*args, **kwargs): return self.n * func(*args, **kwargs) return newfunc > @multiply(4) > def f1(x, y): > return x+y > > print(f1(2, 3)) #=> 20 (= 4 * (2+3)) This all works the same. > > > If function decorator notation could take arguments, > decorator definition would be more simple: > > def multiply(func, n): > def newfunc(*args, **kwargs): > return n * func(*args, **kwargs) > return newfunc > > @multiply 4 # ex: @decorator arg1, arg2, arg3 > def f1(x, y): > return x+y > > > How do you think about this idea? It's unnecessary, just use a class instead of a function to get more clarity. -- ~Ethan~ -- https://mail.python.org/mailman/listinfo/python-list