<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>