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