Aahz wrote: > In article <mailman.3530.1352538537.27098.python-l...@python.org>, > Peter Otten <__pete...@web.de> wrote: >>Miki Tebeka wrote: >> >>>> Is there a simpler way to modify all arguments in a function before >>>> using the arguments? >>> >>> You can use a decorator: >>> >>> from functools import wraps >>> >>> def fix_args(fn): >>> @wraps(fn) >>> def wrapper(*args): >>> args = (arg.replace('_', '') for arg in args) >>> return fn(*args) >>> >>> return wrapper >>> >>> @fix_args >>> def foo(x, y): >>> print(x) >>> print(y) >> >>I was tempted to post that myself, but he said /simpler/ ;) > > From my POV, that *is* simpler. When you change the parameters for foo, > you don't need to change the arg pre-processing. Also allows code reuse, > probably any program needing this kind of processing once will need it > again.
Typical changes would be @fix_args def bar(x, y=None): print(x) print(y) @fix_args def baz(file, x, y): print(s, file=file) Do you find it obvious what bar("a_b") bar("a_b", y="c_d") print? Do you find the traceback produced by the latter helpful? Moving complexity into a helper function often makes client code simpler because if the helper is well-tested and preferrably maintained by someone else the part that you have to deal with becomes simpler, but the overall complexity still increases. A fix_args() decorator is worthwhile only if you need it more than once or twice, and because it is hard to generalise I expect that yagni. -- http://mail.python.org/mailman/listinfo/python-list