[Python-ideas] 'where' statement in Python? (original) (raw)
Nick Coghlan ncoghlan at gmail.com
Fri Jul 23 00:09:33 CEST 2010
- Previous message: [Python-ideas] 'where' statement in Python?
- Next message: [Python-ideas] 'where' statement in Python?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, Jul 23, 2010 at 6:49 AM, George Sakkis <george.sakkis at gmail.com> wrote:
On Thu, Jul 22, 2010 at 10:21 PM, geremy condra <debatem1 at gmail.com> wrote:
I would also argue that the more valid comparison would be nested functions or classes- both perfectly pretty constructs on their own- which would cause me to gnaw on otherwise unoffending office furniture if I encountered them nested 3 deep. I guess you're not much fond of decorators then; it's common to define them exactly as 3-level deep nested functions: def decofactory(decoarg): def decorator(func): def wrapper(*args, **kwargs): if decoarg: return func(*args, **kwargs) return wrapper return decorator @decofactory(n) def func(x, y): ...
Actually, I think that's the main reason why parameterised decorators can be such a pain to understand - keeping the 3 scopes straight in your head is genuinely difficult. There's a reason the recently added contextlib.ContextDecorator is implemented as a class with a call method rather than using nested functions.
A given clause would let you reorder this code, and I think doing so is genuinely clearer:
def decofactory(deco_arg): return decorator given: def decorator(func): if not deco_arg: return func return wrapper given: @wraps(func) def wrapper(*args, **kwargs): return func(*args, **kwargs)
Reversing the order of some aspects of the execution allows the text flow to match the way you would describe the operation: we have a decorator factory that returns a decorator that returns the function unmodified if deco_arg evaluates to False and returns a wrapper around the decorated function otherwise.
Cheers, Nick.
-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
- Previous message: [Python-ideas] 'where' statement in Python?
- Next message: [Python-ideas] 'where' statement in Python?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]