On 2/17/06, "Martin v. Löwis" <[EMAIL PROTECTED]> wrote: > Adam Olsen wrote: > > Still -1. It's better, but it violates the principle of encapsulation > > by mixing how-you-use-it state with what-it-stores state. In doing > > that it has the potential to break an API documented as accepting a > > dict. Code that expects d[key] to raise an exception (and catches the > > resulting KeyError) will now silently "succeed". > > Of course it will, and without quotes. That's the whole point.
Consider these two pieces of code: if key in d: dosomething(d[key]) else: dosomethingelse() try: dosomething(d[key]) except KeyError: dosomethingelse() Before they were the same (assuming dosomething() won't raise KeyError). Now they would behave differently. The latter is even the prefered form, since it only invokes a single dict lookup: On 2/16/06, Delaney, Timothy (Tim) <[EMAIL PROTECTED]> wrote: > try: > v = d[key] > except: > v = d[key] = value Obviously this example could be changed to use default_factory, but I find it hard to believe the only use of that pattern is to set default keys. Of course you could just assume that of all the people passing your function a dict, none of them will ever use the default_factory when they build the dict. Should be easy, right? -- Adam Olsen, aka Rhamphoryncus _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com