code review
Chris Angelico
rosuav at gmail.com
Sat Jun 30 22:20:52 EDT 2012
On Sun, Jul 1, 2012 at 12:06 PM, Steven D'Aprano
<steve+comp.lang.python at 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
More information about the Python-list
mailing list