On Wed, 16 Jul 2014 03:27:23 +0100, MRAB <pyt...@mrabarnett.plus.com> wrote: > >>> # Try modifying the pattern object. > ... p.groupindex['JUNK'] = 'foobar' > >>> > >>> # What are the named groups now? > ... p.groupindex > {'first': 1, 'second': 2, 'JUNK': 'foobar'} > >>> > >>> # And the match object? > ... m.groupdict() > Traceback (most recent call last): > File "<stdin>", line 2, in <module> > IndexError: no such group > > It can't find a named group called 'JUNK'.
After I hit send on my previous message, I thought more about your example. One of the issues here is that modifying the dict breaks an invariant of the API. I have a similar situation in the email module, and I used the same solution you did in regex: always return a new dict. It would be nice to be able to return a frozendict instead of having the overhead of building a new dict on each call. That by itself might not be enough reason. But, if the user wants to use the data in modified form elsewhere, they would then have to construct a new regular dict out of it, making the decision to vary the data from what matches the state of the object it came from an explicit one. That seems to fit the Python zen ("explicit is better than implicit"). So I'm changing my mind, and do consider this a valid use case, even absent the crash. --David _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com