[Python-ideas] Default arguments in Python - the return - running out of ideas but...
Terry Reedy
tjreedy at udel.edu
Wed May 20 01:01:25 CEST 2009
Oleg Broytmann wrote:
> On Tue, May 19, 2009 at 10:31:00PM +0200, Pascal Chambon wrote:
>> I could content myself of the proposed solution :
>> @dynamic
>> def func (a, b = lambda : []):
>> pass
>> But I just dislike the fact that the "dynamic" applies to all the
>> defaults, even those which weren't supposed to be dynamic (and writing
To repeat: I think one-usage default function objects defined by lambda
are rather rare. The most obvious is
def ident(ob): return ob
which, if used once, would likely be used more than once and defined as
above, and which always could be so defined. I suspect even more rare
is such defaults used in the same function as a mutable default such as
[] or {} that needs protecting. And in such rare cases, one could
either pull the function definition into a def statement or prefix it by
a second lambda.
>> "lambda : lambda : []") doesn't look good).
and I would not suggest it unless what one wanted was for the default
arg for each call, after the lambda call, to be 'lambda: []' and not '[]'.
>> Would there be any way of separating "to-be-called" lambdas from normal
>> ones ? Except with a syntax like "b = dyn(lambda: [])" ?
>
> @dynamic('b')
> def func (a, b = lambda : []):
> pass
Or dynamic could have an optional explicit list. But that option would
be rarely needed, I think.
tjr
More information about the Python-ideas
mailing list