On 2011-08-12, Chris Angelico <[email protected]> wrote: > Why is left-to-right inherently more logical than > multiplication-before-addition?
I'd say it's certainly "more Pythonic in a vacuum". Multiplication-before-addition, and all the related rules, require you to know a lot of special rules which are not visible in the code, and many of which have no real logical basis. Left-to-right is, if nothing else, the way the majority of us read. The problem is that since everyone's used precedence before, not using it violates the principle of least astonishment. ... Hmm. There is a thought; I think it may be useful to distinguish between "Pythonic" and "Pythonic in a vacuum". That is to say, there are things which would fit the basic philosophy of Python very well if previous programming languages and tools were not widespread, and there are other things which fit anyway. Using a simple left-to-right evaluation would probably be easier for people to understand, and more self-explanatory, *IF* there were no prior art. > Why is it more logical than > right-to-left? And why is changing people's expectations more logical > than fulfilling them? Well, playing devil's advocate's advocate here... You could argue that switching from braces to indentation might be "changing" peoples' expectations, or might be fulfilling them, depending on the people. I think there's certainly cases where it is probably better to say "that expectation proves to make it impossible to build a clean language, so we're going to ask you to do things this way", and cases where it is probably better to say "that expectation is very deeply established, and doesn't really hurt the language, so we'll adapt to you". > Python uses the + and - symbols to mean addition > and subtraction for good reason. Let's not alienate the mathematical > mind by violating this rule. It would be far safer to go the other way > and demand parentheses on everything. I wouldn't mind that. > Incidentally, in the original expression, it would be slightly more > sane to write it as: > > a = x + y) * z > > borrowing from the musical concept that a repeat sign with no > corresponding begin-repeat means to repeat from the beginning. But > both of these violate XKCD 859. Yes, yes they do. Huh. You know, that's why the outdents-without-symbols bug me; I have a thing with a colon on it introducing something, and then there's nothing ending it. I want that match so I can let the naive stack-depth-counter off somewhere in my brain do its thing without leaving me with a huge feeling of unclosed blocks. -s -- Copyright 2011, all wrongs reversed. Peter Seebach / [email protected] http://www.seebs.net/log/ <-- lawsuits, religion, and funny pictures http://en.wikipedia.org/wiki/Fair_Game_(Scientology) <-- get educated! I am not speaking for my employer, although they do rent some of my opinions. -- http://mail.python.org/mailman/listinfo/python-list
