Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Python 3 question

  1. Jul 31, 2012 #1
    print(1!=0==0) seems to print the value 'True'. I'm trying to understand why.

    Does it first evaluate (1!=0) ?

    Or does it first evaluate (0==0) ?

    Or does it separate them into (1!=0)^(0==0) ?

    I appreciate all help.

  2. jcsd
  3. Jul 31, 2012 #2


    Staff: Mentor

    Not sure but I think it would use the left to right rule since != and == would have the same precedence as operators.

    It's best to write code without an ambiguity like this by explicitly using parenthesis to order the sequence of operations.
  4. Jul 31, 2012 #3

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    That's what it does. There's some python comparison chaining magic going on here to enable expressions such as 0<x<1 to mean x is between 0 and 1 -- just like one would write in math. That you can use it for 1!=0==0 is a side effect of this magic.
  5. Aug 1, 2012 #4


    User Avatar
    Science Advisor

    Thanks for the tip on the 0<x<1 syntax DH. That's useful to know. :)

    Though surely it's equivalent to (1!=0) and (0==0), rather than xor.
  6. Aug 1, 2012 #5

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    Correct. I read the ^ as the mathematical shorthand for boolean and, which is not the case.

    It's not quite equivalent to (1!=0) and (0==0). There is a subtle difference. Consider
    self.inbounds = 0 < self.some_function() < 1

    This will call self.some_function() once and only once. Now let's rewrite this expression as
    self.inbounds = (0 < self.some_function()) and (self.some_function() < 1)

    With this rewrite, self.some_function() will be called once if the result from the first call is non-positive, twice if it is positive. Calling the function sometimes once, sometimes twice, can be deleterious if the function has side effects.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook