On Sun, Jul 1, 2012 at 12:06 PM, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > You can't just arbitrarily stick parentheses around parts of expressions > and expect the result to remain unchanged. Order of evaluation matters: > > 2**3**4 != (2**3)**4
But that's because ** binds right to left. It _is_ valid to say: 2**3**4 = 2**(3**4) That's the usual way of depicting order of evaluation: putting in the implicit parentheses. 1+2*3 = 1+(2*3) Everyone who knows algebra knows that the parens are optional, but nobody would expect them to change the evaluation of the expression. It's like adding whitespace: 1+2*3 = 1 + 2 * 3 = 1 + 2*3 where the latter is another way of showing order of evaluation (the asterisk "binds more tightly" than the plus). With comparisons, it's not the same. (a<b)<=(c<d) is, incidentally, a valid expression, as long as you accept that False is less than True. So if (c<d) is replaced by a boolean variable, you can conceivably have an expression like: (len(x)<minimum)<require_minimum where 'minimum' is an integer and 'require_minimum' is a boolean that, if set to False, overrides the check. Sure, there's other ways to do this, but this is at least plausible. And it's completely different from: len(x)<minimum<require_minimum as Python interprets it. ChrisA -- http://mail.python.org/mailman/listinfo/python-list