> On Tue, Dec 15, 2020 at 9:57 AM Mark Polesky via Python-list <
> python-list@python.org> wrote:
>
>> Hi.
>>
>> # Running this script....
>>
>> D = {'a':1}
>> def get_default():
>>      print('Nobody expects this')
>>      return 0
>> print(D.get('a', get_default()))
>>
>> # ...generates this output:
>>
>> Nobody expects this
>> 1
>>
>> ###
>>
>> Since I'm brand new to this community, I thought I'd ask here first... Is >> this worthy of a bug report? This behavior is definitely unexpected to me,
>> and I accidentally coded an endless loop in a mutual recursion situation
>> because of it.  Calling dict.get.__doc__ only gives this short sentence:
>> Return the value for key if key is in the dictionary, else default.
>> Nothing in that docstring suggests that the default value is evaluated even
>> if the key exists, and I can't think of any good reason to do so.


Hey this is fun! A quick search reveals that I've (mea culpa) always thought of dict.get() as providing a default *value* and not used a function in there to provide said value.

That said, the function's name says it all: get_default(). Is it 'getting' a default value? No, it's (also) reporting-back. Thus a "side-effect". Undesirable, as you say.

Were it appropriate to report that a default value was necessary, maybe something like:

    try:
        print( d[ 'a' ] )
    except KeyError:
        print( "Nobody expects this" )
        d[ 'a' ] = 0
--
Regards =dn
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to