[Python-ideas] Default arguments in Python - the return
Carl Johnson
cmjohnson.mailinglist at gmail.com
Sun May 10 12:34:32 CEST 2009
Larry Hastings wrote:
> George Sakkis wrote:
>
> +0.x for a new keyword that adds dynamic semantics (and removes the
> need for the sentinel kludge).
>
> We don't need new syntax for it. Here's a proof-of-concept hack that you
> can do it with a function decorator.
Your decorator only works for mutables where you just want a deep
copy. It doesn't work for cases where you want a whole expression to
be re-evaluated from scratch. (Maybe for the side effects or
something.) That said, it couldn't be that hard to work out a similar
decorator using lambda thunks instead. The internals of the decorator
would be something like:
for n, arg in enumerate(args):
if arg is defaults[n]: #If you didn't get passed anything
args[n] = defaults[n]() #Unthunk the lambda
The usage might be:
@dynamicdefaults
def f(arg=lambda: dosomething()):
It cuts 3 lines of boilerplate down to one line, but makes all your
function calls a little slower.
-- Carl
More information about the Python-ideas
mailing list