What value should be passed to make a function use the default argument value?
Georg Brandl
g.brandl-nospam at gmx.net
Wed Oct 4 06:55:16 EDT 2006
Antoon Pardon wrote:
> On 2006-10-04, Paul Rubin <http> wrote:
>> Antoon Pardon <apardon at forel.vub.ac.be> writes:
>>> Now in this case you could start by assigning arg the value 1 and
>>> eliminate the if test. However that only works if you know the
>>> default value for the argument. What he seems to be asking for
>>> is if there is an object, (let as call it Default), that would
>>> make code like:
>>>
>>> def f(var=1):
>>>
>>> Equivallent to:
>>>
>>> def f(var=Default)
>>> if var is Default)
>>> var = 1
>>
>> Oh, I see. Yes, the OP should just use a distinct default value
>> instead of 1. I usually do this with
>>
>> sentinel = object()
>>
>> def f(var=sentinel):
>> if var is sentinel:
>> # f was called without an arg
>
> But that can only work if you are the author of f. Take the
> following code:
>
> def myrepeat(obj, times = xxx):
> return itertools.repeat(obj, times)
>
> What value do I have to substitue for xxx, so that myrepeat
> will have the exact same function as itertools.repeat?
There's no possible value. You'll have to write this like
def myrepeat(obj, times=None):
if times is None:
return itertools.repeat(obj)
else:
return itertools.repeat(obj, times)
Many functions implemented in C have this behavior.
For all functions written in Python, you can look up the default
value in the source.
Georg
More information about the Python-list
mailing list