On Sun, Jul 22, 2018 at 05:09:39PM +0200, Giampaolo Rodola' wrote: > > > I personally don't find "a ?? b" too bad (let's say I'm -0 about it) > > > but idioms such as "a?.b", "a ??= b" and "a?[3] ?? 4" look too > > > Perl-ish to me, non pythonic and overall not explicit, no matter what > > > the chosen symbol is gonna be. > > > > Please explain what is not explicit about it. "a?.b" is very simple > > and perfectly explicit: it means "None if a is None else a.b". What > > does "not explicit" mean, other than "I don't like this code"? > > I find it less explicit mainly because it does 3 things at once: check > if attribute is None, use it if it's not None and continue the > evaluation from left to right. I find that logic to be more explicit > when living on different lines or is clearly delimited by keywords and > spaces.
Does this mean that instead of writing: result = obj.attr + 1 you prefer to be "explicit" and split it over multiple lines? # named functions are always better than punctuation from operator import add # explicit is better than punctuation value = getattr(obj, "attr") result = add(value, 1) > ? has no spaces, it's literally "variable names interrupted by > question marks" and evaluation can stop at any time while scanning the > line from left to right. Just like ordinary attribute access. This is the point I was making earlier: you accept existing punctuation doing these things: try: obj.spam.egsg.tomato.cheese # oops a typo except AttributeError: # evaluation can stop at any time ... while demanding a higher standard for new punctuation. All of your criticisms of ? punctuation applies to . as well. Do you think that Python is a worse language than it should have been because we use . for attribute access? > Multiple "?" can live on the same line so > that's incentive to write one-liners, really, and to me one-liners are > always less explicit than the same logic split on multiple lines. Explicit is not always better. import this is much better than: for location in sys.path: try: for file in os.listdir(location): if os.splitext(file) in ('.pyc', '.py', '.so'): ... etc. There is a HUGE amount of implicit complexity and work done behind the scenes in every import, and we're happy to keep it that way. -- Steve _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/