Is it explicitly specified?

Jorge Godoy jgodoy at gmail.com
Sun Feb 3 06:19:09 EST 2008


mario ruggier wrote:

> Is there any way to tell between whether a keyword arg has been explicitly
> specified (to the same value as the default for it) or not... For example:
> 
> def func(key=None):
>     do something with key
> 
> But the following two usages give same results:
> 
> func()
> func(key=None)
> 
> It may sometimes be useful to make use of the conceptual difference
> between these two cases, that is that in one case the user did not specify
> any key and in the other the user explicitly specified the key to be None.
> 
> Is there any way to tell this difference from within the called function?
> And if so, would there be any strong reasons to not rely on this
> difference? Would it be maybe a little abusive of what a keyword arg
> actually is?

If you change the idiom you use to:

>>> def myfunc(**kwargs):
...     something = kwargs.get('something', None)
...     print something
... 
>>> myfunc()
None
>>> myfunc(something='Something')
Something
>>>

Then you can test if 'something' is in kwargs dict or not.  If it isn't,
then you used the default value.  If it is, then the user
supplied 'something' to you, no matter what its value is.





More information about the Python-list mailing list