擅长:python、mysql、java
<p>因为<code>None</code>不是唯一被认为是错误的东西。</p>
<pre><code>if not False:
print "False is false."
if not 0:
print "0 is false."
if not []:
print "An empty list is false."
if not ():
print "An empty tuple is false."
if not {}:
print "An empty dict is false."
if not "":
print "An empty string is false."
</code></pre>
<p><code>False</code>、<code>0</code>、<code>()</code>、<code>[]</code>、<code>{}</code>和<code>""</code>都与<code>None</code>不同,因此您的两个代码片段是<em>而不是</em>等价的。</p>
<p>此外,请考虑以下几点:</p>
<pre><code>>>> False == 0
True
>>> False == ()
False
</code></pre>
<p><code>if object:</code>是<em>而不是</em>一个等式检查。<code>0</code>、<code>()</code>、<code>[]</code>、<code>None</code>、<code>{}</code>等<em>都是</em>彼此不同,但它们都将<em>评估为False。</p>
<p>这就是短路表达背后的“魔力”,比如:</p>
<pre><code>foo = bar and spam or eggs
</code></pre>
<p>简写为:</p>
<pre><code>if bar:
foo = spam
else:
foo = eggs
</code></pre>
<p>尽管你真的应该写:</p>
<pre><code>foo = spam if bar else egg
</code></pre>