Is it explicitly specified?
TeroV
teroV at nowhere.invalid
Sun Feb 3 06:35:42 EST 2008
Jorge Godoy wrote:
> 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.
>
>
Exactly, and if you use idiom func(*args, **kwargs) you can distinguish
all the usage cases:
>>> def func(*args, **kwargs):
... print(args, kwargs)
...
>>> func()
() {}
>>> func(key='alabama')
() {'key': 'alabama'}
>>> func('alabama')
('alabama',) {}
More information about the Python-list
mailing list