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. > Python isn't a lazy language. It's evaluating get_default() unconditionally, prior to executing the D.get(). I don't think it's a Python bug. BTW, I tend to prefer collections.defaultdict over the two argument D.get or setdefault. -- https://mail.python.org/mailman/listinfo/python-list