Optional arguments syntax (was Re: sum() requires number, not simply __add__)

Chris Angelico rosuav at gmail.com
Thu Feb 23 17:11:51 EST 2012


On Fri, Feb 24, 2012 at 9:09 AM, Arnaud Delobelle <arnodel at gmail.com> wrote:
> On 23 February 2012 22:04, Chris Angelico <rosuav at gmail.com> wrote:
>> On Fri, Feb 24, 2012 at 8:59 AM, Arnaud Delobelle <arnodel at gmail.com> wrote:
>>> def sum(iterable, start=_sentinel, _sentinel=_sentinel):
>>
>> Is this a reason for Python to introduce a new syntax, such as:
>>
>> def foo(blah, optional=del):
>>    if optional is del: print("No argument was provided")
>>
>> Basically, 'del' is treated like a unique non-providable object, only
>> possible in an argument list and only if the argument was omitted. No
>> more proliferation of individual sentinels... what do you think?
>
> The problem with these proposals is to avoid the leakage of 'del'.
> Here you could do:
>
> def get_del(x=del):
>    return x
>
> And then you're in trouble again.

Yep; what I was thinking was that this would be a magic token that, if
used in any expression other than "is del", would decay to some other
object such as 0 or None. Otherwise, yeah, there's no difference
between that and any other global sentinel.

ChrisA



More information about the Python-list mailing list