On 05/07/16 18:31, Alex Hall wrote: > For decorators, do you never include parentheses except for passing > arguments? It seems a bit odd to drop them if they'd be empty, given that > anywhere else doing so would return the function object rather than call > it.
Remember what the @ sign is doing. @decorator def func():... is effectively suyntactic sugar for func = decorator(func) If you write @decorator() That translates to @decorator()(func) which is not at all the same thing. Of course you could get into brain melting mode and write a meta-decorator that returns a decorator! >>> def meta(): def decorator(f): def logit(*args,**kwargs): print("called function with ", args, kwargs) return f(*args,**kwargs) return logit return decorator >>> @meta() #with parens and potentially args def square(x): return x*x >>> square(3) called function with (3,) {} 9 >>> yikes! It all starts to get too complicated for my tiny brain at this point and I usually find another more explicit way to do what I need... -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor