What value should be passed to make a function use the default argument value?

Antoon Pardon apardon at forel.vub.ac.be
Wed Oct 4 08:28:00 EDT 2006


On 2006-10-04, Antoon Pardon <apardon at forel.vub.ac.be> wrote:
> On 2006-10-03, LaundroMat <Laundro at gmail.com> wrote:
>> Suppose I have this function:
>>
>> def f(var=1):
>> return var*2
>>
>> What value do I have to pass to f() if I want it to evaluate var to 1?
>> I know that f() will return 2, but what if I absolutely want to pass a
>> value to f()? "None" doesn't seem to work..
>>
>> Thanks in advance.
>>
>
> I think the only general solution for your problem would be to
> define a defaulter function. Something like the following:
>
>   Default = object()
>
>   def defaulter(f, *args):
>
>     while args:
>       if args[-1] is Default:
>         args = args[:-1]
>       else:
>         break
>     return f(*args)
>
>
> The call:
>
>   defaulter(f, arg1, arg2, Default, ..., Default)
>
> would then be equivallent to:
>
>   f(arg1, arg2)
>
> Or in your case you would call:
>
>   defaulter(f, Default)

A little update, with the functools in python 2.5 you
could turn the above into a decorator. Something like
the following (not tested):

  def defaulting(f):
    return functools.partial(defaulter, f)

You could then simply write:

  @defaulting
  def f(var=1):
    return var * 2

And for built in or library functions something like:

  from itertools import repeat
  repeat = defaulting(repeat)

-- 
Antoon Pardon



More information about the Python-list mailing list