擅长:python、mysql、java
<p>使用<code>all</code>:</p>
<pre><code>>>> d = {1:0, 2:0, 3:1}
>>> all(x==0 for x in d.values())
False
>>> d[3] = 0
>>> all(x==0 for x in d.values())
True
</code></pre>
<p>无论您使用<code>any</code>还是<code>all</code>,计算都将是惰性的。<code>all</code>在遇到第一个错误值时返回<code>False</code>。<code>any</code>在遇到第一个truthy值时返回<code>True</code>。</p>
<p>因此,<code>not any(d.values())</code>将为您提供与我提供的示例字典相同的结果。它比具有生成器理解的<code>all</code>版本稍短。就我个人而言,我仍然更喜欢<code>all</code>变体,因为它表达了您想要的内容,而读者不必在其头脑中进行逻辑否定。</p>
<p>不过,在这里使用<code>any</code>还有一个问题:</p>
<pre><code>>>> d = {1:[], 2:{}, 3:''}
>>> not any(d.values())
True
</code></pre>
<p>字典不包含值0,但<code>not any(d.values())</code>将返回<code>True</code>,因为所有值都是错误的,即<code>bool(value)</code>返回空列表、字典或字符串的<code>False</code>。</p>
<p>总之:可读性计数,显式地,使用<code>all</code>解决方案。</p>