<br><div class="gmail_quote">On Tue, May 31, 2011 at 9:16 AM, Ian Kelly <span dir="ltr"><<a href="mailto:ian.g.kelly@gmail.com">ian.g.kelly@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="im">On Tue, May 31, 2011 at 1:38 AM, Daniel Kluev <<a href="mailto:dan.kluev@gmail.com">dan.kluev@gmail.com</a>> wrote:<br>
> @decorator.decorator<br>
> def copy_args(f, *args, **kw):<br>
>    nargs = []<br>
>    for arg in args:<br>
>        nargs.append(copy.deepcopy(arg))<br>
>    nkw = {}<br>
>    for k,v in kw.iteritems():<br>
>        nkw[k] = copy.deepcopy(v)<br>
>    return f(*nargs, **nkw)<br>
<br>
</div>There is no "decorator" module in the standard library.  This must be<br>
some third-party module.  The usual way to do this would be:<br>
<br>
def copy_args(f):<br>
    @functools.wraps(f)<br>
    def wrapper(*args, **kw):<br>
        nargs = map(copy.deepcopy, args)<br>
        nkw = dict(zip(kw.keys(), map(copy.deepcopy, kw.values())))<br>
        return f(*nargs, **nkw)<br>
    return wrapper<br>
<br></blockquote><div><br></div><div>Is there any reason not to simplify this to:</div><div><br></div><div>def copy_args(f):<br>   @functools.wraps(f)<br>   def wrapper(*args, **kw):<br>       nargs = copy.deepcopy(args)<br>

       nkw = copy.deepcopy(kw)<br>       return f(*nargs, **nkw)<br>   return wrapper</div><div><br></div><div><br></div><div>It means you will copy the keys as well, however they will (almost) certainly be strings which is effectively a no-op.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Note that this will always work, whereas the "decorator.decorator"<br>
version will break if the decorated function happens to take a keyword<br>
argument named "f".<br>
<br>
Cheers,<br>
<font color="#888888">Ian<br>
</font><div><div></div><div class="h5">--<br>
<a href="http://mail.python.org/mailman/listinfo/python-list" target="_blank">http://mail.python.org/mailman/listinfo/python-list</a><br>
</div></div></blockquote></div><br>