how to let argument be optional falling back to certain integer

Boris Dorestand bdorestand at example.com
Sat Jun 20 19:59:58 EDT 2020


Chris Angelico <rosuav at gmail.com> writes:

> On Sun, Jun 21, 2020 at 2:02 AM Boris Dorestand <bdorestand at example.com> wrote:
>>
>> I just wrote
>>
>> def f(y, N, k = None):
>>   k = k or (N - 1)
>>   return k
>>
>> I was surprised to find out that 0 == False, so f(7, 31, 0) produces 31.
>>
>> I'd like 0 to be a valid choice for k.
>>
>> How do you guys let k be an optional argument such that it defaults to
>> N - 1?
>>
>
> The easiest way is to explicitly check for None.
>
> if k is None: k = N - 1

Got it.  That's clear code.

> Zero being false shouldn't be a surprise. If None can count as false,
> then so should other "emptiness" values. (Remember, the canonical
> falseness value is False, not None.)

This is true.  I have written 0 as false in C so many times.  But
clearly for me times have changed...  I now look at numbers as a thing
in their own special class not to be confused as truth-values.  (So much
so that I fell for this.)  But I confess I still think of numbers as all
TRUE.  (Even zero!)

Anyway, I kind of replied just to thank you all for the great group this
is.  ChrisA, I don't know how can keep up with this newsgroup, but you
do.  This is crazy.  Years go by and when I come back, there you are
still.  You're priceless.


More information about the Python-list mailing list