On Mon, Dec 18, 2017 at 7:58 PM, Steven D'Aprano <st...@pearwood.info> wrote: > On Mon, Dec 18, 2017 at 07:37:03PM -0800, Nathaniel Smith wrote: >> On Mon, Dec 18, 2017 at 7:02 PM, Barry Warsaw <ba...@python.org> wrote: >> > On Dec 18, 2017, at 21:11, Chris Barker <chris.bar...@noaa.gov> wrote: >> > >> >> Will changing pprint be considered a breaking change? >> > >> > Yes, definitely. >> >> Wait, what? Why would changing pprint (so that it accurately reflects >> dict's new underlying semantics!) be a breaking change? > > I have a script which today prints data like so: > > {'Aaron': 62, > 'Anne': 51, > 'Bob': 23, > 'George': 30, > 'Karen': 45, > 'Sue': 17, > 'Sylvester': 34} > > Tomorrow, it will suddenly start printing: > > {'Bob': 23, > 'Karen': 45, > 'Sue': 17, > 'George': 30, > 'Aaron': 62, > 'Anne': 51, > 'Sylvester': 34} > > > and my users will yell at me that my script is broken because the data > is now in random order.
To make sure I understand, do you actually have a script like this, or is this hypothetical? > Now, maybe that's my own damn fault for using > pprint instead of writing my own pretty printer... but surely the point > of pprint is so I don't have to write my own? > > Besides, the docs say very prominently: > > "Dictionaries are sorted by key before the display is computed." > > https://docs.python.org/3/library/pprint.html > > so I think I can be excused having relied on that feature. No need to get aggro -- I asked a question, it wasn't a personal attack. At a high-level, pprint's job is to "pretty-print arbitray Python data structures in a form which can be used as input to the interpreter" (quoting the first sentence of its documentation), i.e., like repr() it's fundamentally intended as a debugging tool that's supposed to match how Python works, not any particular externally imposed output format. Now, how Python works has changed. Previously dict order was arbitrary, so picking the arbitrary order that happened to be sorted was a nice convenience. Now, dict order isn't arbitrary, and sorting dicts both obscures the actual structure of the Python objects, and also breaks round-tripping through pprint. Given that pprint's overarching documented contract of "represent Python objects" now conflicts with the more-specific documented contract of "sort dict keys", something has to give. My feeling is that we should preserve the overarching contract, not the details of how dicts were handled. Here's another example of a teacher struggling with this: https://mastodon.social/@aparrish/13011522 But I would be in favor of adding a kwarg to let people opt-in to the old behavior like: from pprint import PrettyPrinter pprint = PrettyPrinter(sortdict=True).pprint -n -- Nathaniel J. Smith -- https://vorpus.org _______________________________________________ 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