On Tuesday, June 28, 2016 at 5:03:08 PM UTC+12, Ben Finney wrote:
> There is a clever one-line decorator that has been copy-pasted without
> explanation in many code bases for many years::
> 
>     decorator_with_args = lambda decorator: lambda *args, **kwargs: lambda 
> func: decorator(func, *args, **kwargs)
> 

For those who want docstrings, I’ll give you docstrings:

    def decorator_with_args(decorator) :
        "given function decorator(func, *args, **kwargs), returns a decorator 
which," \
        " given func, returns the result of decorator(func, *args, **kwargs)."

        def decorate(*args, **kwargs) :

            def generated_decorator(func) :
                return \
                    decorator(func, *args, **kwargs)
            #end generated_decorator

        #begin decorate
            generated_decorator.__name__ = 
"decorator_{}".format(decorator.__name__)
            generated_decorator.__doc__ = "decorator which applies {} to the 
previously-specified arguments".format(decorator.__name__)
            return \
                generated_decorator
        #end decorate

    #begin decorator_with_args
        decorate.__name__ = "decorate_with_{}".format(decorator.__name__)
        decorate.__doc__ = "generates a decorator which applies {} to the given 
arguments".format(decorator.__name__)
        return \
            decorate
    #end decorator_with_args
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to