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(). -- https://mail.python.org/mailman/listinfo/python-list