<p>测试使用python3.4完成。你知道吗</p>
<p><code>stmt5</code>是由<a href="https://stackoverflow.com/users/645956/grc">grc</a>提出的。
<code>stmt3</code>由<a href="https://stackoverflow.com/users/113195/boldewyn">boldewyn</a>提出,在大多数情况下似乎是最快的选择(除非数据主要由int组成):</p>
<pre><code>import timeit
setup = "a = 123; b = True"
stmt1 = "isinstance(a, bool) ; isinstance(b, bool)"
stmt2 = "isinstance(a, int) ; isinstance(b, int)"
stmt3 = "a is True or a is False; b is True or b is False"
stmt4 = "type(a) is bool; type(b) is bool"
stmt5 = "a.__class__ is bool ; b.__class__ is bool"
repetitions = 10**6
t1 = timeit.timeit(stmt1, setup=setup, number=repetitions)
t2 = timeit.timeit(stmt2, setup=setup, number=repetitions)
t3 = timeit.timeit(stmt3, setup=setup, number=repetitions)
t4 = timeit.timeit(stmt4, setup=setup, number=repetitions)
t5 = timeit.timeit(stmt5, setup=setup, number=repetitions)
print(t1)
print(t2)
print(t3)
print(t4)
print(t5)
</code></pre>
<p>结果:</p>
<pre><code>0.251072
0.190989
0.037483
0.140759
0.08480
</code></pre>
<p>注意<code>isinstance(123, bool)</code>比<code>isinstance(123, int)</code>慢。因此,我必须同时使用<code>a</code>和<code>b</code>。当然,这是假设有相等数量的int和bool。你知道吗</p>
<p>另外,正如注释中的<a href="https://stackoverflow.com/users/645956/grc">grc</a>所建议的那样,“<em>True更快,因为它在第一次比较后短路,所以如果使用<code>b = False</code>,则<code>stmt3</code>的时间会稍微慢一些。你知道吗</p>
<hr/>
<p>仅当数据不包含<code>0, 0.0, 1, 1.0</code>时可用:</p>
<pre><code>setup = "a = 123; b = True; s = {True, False}"
stmt3 = "a is True or a is False; b is True or b is False"
stmt6 = "a in s ; b in s"
</code></pre>
<p>结果:</p>
<pre><code>0.037680588
0.03936778
</code></pre>
<p>如果您的数据主要由整数组成,那么这将成为最快的选项(<code>0.045375</code>与<code>0.0390963</code>)。你知道吗</p>