Wow, thanks.  It&#39;s neat to see the difference between<div><br><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">&gt;&gt;&gt; dis.dis(compile(&#39;x if y else z&#39;, &#39;eval&#39;, &#39;eval&#39;))</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  1           0 LOAD_NAME                0 (y)</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">              3 JUMP_IF_FALSE            5 (to 11)</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">              6 POP_TOP             </font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">              7 LOAD_NAME                1 (x)</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">             10 RETURN_VALUE        </font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        &gt;&gt;   11 POP_TOP             </font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">             12 LOAD_NAME                2 (z)</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">             15 RETURN_VALUE        </font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">&gt;&gt;&gt; dis.dis(compile(&#39;y and x or z&#39;, &#39;eval&#39;, &#39;eval&#39;))</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  1           0 LOAD_NAME                0 (y)</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">              3 JUMP_IF_FALSE            7 (to 13)</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">              6 POP_TOP             </font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">              7 LOAD_NAME                1 (x)</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">             10 JUMP_IF_TRUE             4 (to 17)</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        &gt;&gt;   13 POP_TOP             </font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">             14 LOAD_NAME                2 (z)</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        &gt;&gt;   17 RETURN_VALUE        </font></div><div><br></div><div>in byte code.  Now if only I weren&#39;t stuck in 2.4.3 at work...</div>
<div><br></div><div>  - Jeremy</div><div><br></div><div><br><div class="gmail_quote">On Mon, Jul 12, 2010 at 4:48 PM, Aahz <span dir="ltr">&lt;<a href="mailto:aahz@pythoncraft.com">aahz@pythoncraft.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On Mon, Jul 12, 2010, Alex Martelli wrote:<br>
&gt;<br>
&gt; `and` and `or` cannot be overridden; they always perform their<br>
&gt; short-circuit evaluation functionality, no matter what the types on<br>
&gt; either side.  I understand your surprise, because you think of them as<br>
&gt; operator, but they&#39;re like other keywords such as `lambda`, `if`,<br>
&gt; `else`... they **control what gets executed, when, and whether the<br>
&gt; execution happens at all in a certain circumstance**.<br>
<br>
</div>Just to emphasize Alex&#39;s point, this is a necessary part of the boolean<br>
short-circuit capability that allows stuff like this:<br>
<br>
    if a is not None and a.valid():<br>
<br>
(assume that a contains a method called &quot;valid&quot; if it&#39;s not None -- but<br>
there&#39;s no getattr() for &quot;valid&quot; unless a is not None)<br>
<font color="#888888">--<br>
Aahz (<a href="mailto:aahz@pythoncraft.com">aahz@pythoncraft.com</a>)           &lt;*&gt;         <a href="http://www.pythoncraft.com/" target="_blank">http://www.pythoncraft.com/</a><br>
<br>
&quot;....Normal is what cuts off your sixth finger and your tail...&quot;  --Siobhan<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
Baypiggies mailing list<br>
<a href="mailto:Baypiggies@python.org">Baypiggies@python.org</a><br>
To change your subscription options or unsubscribe:<br>
<a href="http://mail.python.org/mailman/listinfo/baypiggies" target="_blank">http://mail.python.org/mailman/listinfo/baypiggies</a><br>
</div></div></blockquote></div><br></div></div></div>