True of False

Marc Christiansen usenet at solar-empire.de
Thu Sep 27 13:45:06 EDT 2007


Casey <Caseyweb at gmail.com> wrote:
> I would recommend the OP try this:
> 
> run the (I)python shell and try the following:
> 
>>>> a = [x for x in "abcdefg"]
>>>> a
> ['a','b','c','d','e','f','g']
>>>> "c" in a
> True
>>>> "c" in a == True
> False
>>>> ("c" in a) == True
> True
> 
> The reason your conditional failed is that it was interpreted as "c"
> in (a == True) which is False.

That was my first thought, too. But watch:
  >>> a = list("abcde")
  >>> a
  ['a', 'b', 'c', 'd', 'e']
  >>> "c" in (a == True)
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  TypeError: argument of type 'bool' is not iterable

Then it dawned on me (is this the right phrase?): It's the same situation
as e.g. x < y >= 1, which means the same as "x < y and y >= 1" (except
that y is only evaluated once). So '"c" in a == True' gets evaluated as
'"c" in a and a == True'.

> the "==" operator binds at a higher precedence level than the "in"
> operator, just as multiplication binds higher than addition

Operator precedence plays no role in this case. It is a case of
'chained' comparisons.

Hope that clears it up
Marc



More information about the Python-list mailing list