On Thu, 21 Mar 2019 at 17:27, Rémi Lapeyre <remi.lape...@henki.fr> wrote: > > Le 21 mars 2019 à 17:43:31, Steven D'Aprano > (st...@pearwood.info(mailto:st...@pearwood.info)) a écrit: > > > I'd like to make a plea to people: > > > > I get it, there is now significant opposition to using the + symbol for > > this proposed operator. At the time I wrote the first draft of the PEP, > > there was virtually no opposition to it, and the | operator had very > > little support. This has clearly changed. > > > > At this point I don't think it is productive to keep making subjective > > claims that + will be more confusing or surprising. You've made your > > point that you don't like it, and the next draft^1 of the PEP will make > > that clear. > > > > But if you have *concrete examples* of code that currently is easy to > > understand, but will be harder to understand if we add dict.__add__, > > then please do show me! > > > > For those who oppose the + operator, it will help me if you made it > > clear whether it is *just* the + symbol you dislike, and would accept > > the | operator instead, or whether you hate the whole operator concept > > regardless of how it is spelled. > > Thanks for the work you are doing on this PEP and for debunking my > misconceptions regarding types, I’m currently learning a lot about them. > > I don’t know if it matters but I’m in favor of the method > > > And to those who support this PEP, code examples where a dict merge > > operator will help are most welcome! > > Not matter the notation you end up choosing, I think this code: > https://github.com/jpadilla/pyjwt/blob/master/jwt/utils.py#L71-L81 > > which is part of a widely used library to validate JWTs would greatly > benefit from a new merge to merge dicts. (This package is 78 on > https://hugovk.github.io/top-pypi-packages/)
It's already got a function that does the job. How much benefit is there *really* from being able to replace it with d1 + d2 once you drop support for Python < 3.8? But point taken that new code would have been able to avoid the function in the first place. ... or would it? def merge_dict(original, updates): if not updates: return original With the + operator. d1 + None will fail with an error. With your code, updates=None means "return the original unchanged". Does that matter with your current code? The point is that in many real world cases, you'd write a function *anyway*, to handle corner cases, and a new operator doesn't make much difference at that point. Having said all of that, I'm mostly indifferent to the idea of having a built in "dictionary merge" capability - I doubt I'd use it *much*, but if it were there I'm sure I'd find useful it on the odd occasion. I'm somewhat against an operator, I really don't see why this couldn't be a method (although the asymmetry in d1.merge(d2) makes me have a mild preference for a class method or standalone function). I can't form an opinion between + and |, I find | significantly uglier (I tend to avoid using it for sets, in favour of the union method) but I am mildly uncomfortable with more overloading of +. Serious suggestion - why not follow the lead of sets, and have *both* an operator and a method? And if you think that's a bad idea, it would be worth considering *why* it's a bad idea for dictionaries, when it's OK for sets (and "well, I didn't like it when sets did it" isn't sufficient ;-)) And having said that, I'll go back to lurking and not really caring one way or the other. Paul _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/