book example confusion

byron bjruth at gmail.com
Fri Sep 12 16:07:52 EDT 2008


On Sep 12, 3:51 pm, John Machin <sjmac... at lexicon.net> wrote:
> On Sep 13, 5:36 am, byron <bjr... at gmail.com> 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.



More information about the Python-list mailing list