Serhiy Storchaka <storch...@gmail.com> writes:

> 15.12.20 19:07, Mark Polesky via Python-list пише:
>> # 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.
>> 
>> Am I missing something?
>
> You are missed that expressions for function arguments are always
> evaluated before passing their values to a function. This is expected
> behavior, and I can't remember any programming language in which it's
> different.
>
> So dict.get() returns the value of argument default, which is computed
> by calling function get_default() before calling dict.get().

Isn't the second argument to D.get() the value to be return if the first
argument is not a valid key?  In that case, why does it make any
difference here what the second argument of D.get() is since the key 'a'
does exist?

Thus, I would indeed expect the code above to print '1'.  I am obviously
missing something here.

Cheers,

Loris

-- 
This signature is currently under construction.
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to