<p>几个月前在python-dev上讨论过这个问题。
与非本地或带有语句doc的链接相反,拥有大量指向True定义的链接会很烦人。</p>
<p>我总结了为什么真假会让事情变得“更美好”。</p>
<ol>
<li><p>作为循环内调用的函数的副作用重新绑定。</p>
<p>很容易改变事实,例如:</p>
<p><code>def True():
print True</code></p></li>
<li><p>对于让用户代码重新绑定内置名称None、True和False,没有什么好的用例,使它们成为关键字几乎只有plus。</p></li>
<li><p>使程序在每一步都要在符号表中查找“真”,才发现真的有值真的远非直观。(这就是为什么1比True快。)</p>
<blockquote>
<p>x=compile('while 1: foop()', '', 'exec')</p>
<p>dis.dis(x)</p>
</blockquote>
<pre><code> 0 SETUP_LOOP 19 (to 22)
3 JUMP_FORWARD 4 (to 10)
6 JUMP_IF_FALSE 11 (to 20)
9 POP_TOP
>> 10 LOAD_NAME 0 (foop)
13 CALL_FUNCTION 0
16 POP_TOP
17 JUMP_ABSOLUTE 10
>> 20 POP_TOP
21 POP_BLOCK
>> 22 LOAD_CONST 1 (None)
25 RETURN_VALUE
</code></pre></li>
</ol>
<blockquote>
<p>x=compile('while True: foop()', '', 'exec')</p>
<p>dis.dis(x)</p>
</blockquote>
<pre><code> 0 SETUP_LOOP 19 (to 22)
>> 3 LOAD_NAME 0 (True)
6 JUMP_IF_FALSE 11 (to 20)
9 POP_TOP
10 LOAD_NAME 1 (foop)
13 CALL_FUNCTION 0
16 POP_TOP
17 JUMP_ABSOLUTE 3
>> 20 POP_TOP
21 POP_BLOCK
>> 22 LOAD_CONST 0 (None)
25 RETURN_VALUE
</code></pre>
<h2>参考:</h2>
<ul>
<li><a href="http://mail.python.org/pipermail/python-checkins/2011-September/107641.html" rel="nofollow">http://mail.python.org/pipermail/python-checkins/2011-September/107641.html</a></li>
<li><a href="http://mail.python.org/pipermail/python-checkins/2012-January/110353.html" rel="nofollow">http://mail.python.org/pipermail/python-checkins/2012-January/110353.html</a></li>
<li><a href="https://groups.google.com/forum/#!searchin/comp.lang.python/False" rel="nofollow">https://groups.google.com/forum/#!searchin/comp.lang.python/False</a>$20True$20keyword/comp.lang.python/65B6qWUf8wI/HwQ5pwnW7woJ</li>
</ul>
<h2>开始与指定真假相关的谈话:</h2>
<ul>
<li><a href="http://bugs.python.org/issue2349" rel="nofollow">http://bugs.python.org/issue2349</a></li>
<li><a href="https://groups.google.com/forum/comp.lang.python/65B6qWUf8wI/HwQ5pwnW7woJ" rel="nofollow">https://groups.google.com/forum/comp.lang.python/65B6qWUf8wI/HwQ5pwnW7woJ</a></li>
</ul>
<h2>一些辅助数据:</h2>
<h2>注:有些数字显示为真/1:</h2>
<pre><code>[alex@lancelot test]$ timeit.py -c -s'import itertools as it' 'c=it.count()'
'while True:' ' if c.next()>99: break'
10000 loops, best of 3: 91 usec per loop
[alex@lancelot test]$ timeit.py -c -s'import itertools as it' 'c=it.count()'
'while 1:' ' if c.next()>99: break'
10000 loops, best of 3: 76 usec per loop
</code></pre>