On Sep 12, 3:51 pm, John Machin <[EMAIL PROTECTED]> wrote: > On Sep 13, 5:36 am, byron <[EMAIL PROTECTED]> wrote: > > > > > I am reading o'reilly's learning python (great book), but i came > > across an example (pg 291, pdf) that I am not quite understanding the > > reasoning for the author's explanation: > > > if f1() or f2(): > > > The author states that do to the nature of that expression, if f1() > > returns True, f2() will not be evaluated.. which makes sense. His > > quote: > > > "Here, if f1 returns a true (or nonempty) value, Python will > > never run f2." > > > He then states: > > > "To guarantee that both functions will be run, call them > > before the 'or':" > > > tmp1, tmp2 = f1(), f2() > > if tmp1 or tmp2: > > > Being that each function is an object, a name assignment to > > (tmp1,tmp2) doesn't actually evaluate or run the function itself until > > the name is called.. so why would the latter example "run" both > > functions as the author suggests? > > It's not a "name assignment". > In effect it's doing this: > tmp1 = f1() # get the RESULT of calling f1() > tmp2 = f2() # likewise f2 > if tmp1 or tmp2: # if result1 or result2 > A (pointless) "name assignment") with the nil effect that you fear > would look like this: > tmp1, tmp2 = f1, f2 # Look, no parentheses after function names > if tmp1() or tmp2(): > > HTH, > John
That makes sense. Thank you for the clarification. -- http://mail.python.org/mailman/listinfo/python-list