What value should be passed to make a function use the default argument value?
Laundro at gmail.com
Wed Oct 4 10:15:35 CEST 2006
Rob De Almeida wrote:
> LaundroMat 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..
> If you *absolutely* want to pass a value and you don't know the default
> value (otherwise you could just pass it):
> >>> import inspect
> >>> v = inspect.getargspec(f) # first default value
> >>> f(v)
I have in fact a bunch of functions that all pass similar information
to one main function. That function takes (amongst others) a template
variable. If it's not being passed, it is set to a default value by the
function called upon.
For the moment, whenever a function calls the main function, I check
whether the calling function has the template variable set:
>>> if template:
>>> return mainFunction(var, template)
>>> return mainFunction(var)
Now, I thought this isn't the cleanest way to do things; so I was
looking for ways to initialize the template variable, so that I could
always return mainFunction(var, template). mainFunction() would then
assign the default value to template.
>From your answers, this seems to be impossible. The minute my variable
is initialised, there's no way I can have mainFunction() assign a value
without explicitly asking it to do so.
I guess the best way would then be to change mainFunction from:
>>> def mainFunction(var, template='base'):
>>> def mainFunction(var, template):
>>> if len(template)=0:
>>> template = 'base'
and have the calling functions call mainFunction (var, template) and
initialise template to ''.
I still have that nagging feeling nicer code could be written to solve
this, but I won't try to lose any sleep over it.
Thanks for all the replies.
More information about the Python-list