检查整数是否等于0是否有差异

时间:2017-12-26 08:42:29

标签: python evaluation

因此,据我所知,有两种不同的方法可以检查Python中的整数是否为0。我们可以这样做:

if i == 0:
    ...

if not i:
    ...

第一个可能被认为更清楚,但是在任何情况下它们产生不同的结果或者表现更好吗?

3 个答案:

答案 0 :(得分:2)

是的,有区别。您可以使用dis反编译字节代码,以观察最低级别的情况。

import dis

dis.dis("if i == 0: pass")
  1           0 LOAD_NAME                0 (i)
              3 LOAD_CONST               0 (0)
              6 COMPARE_OP               2 (==)
              9 POP_JUMP_IF_FALSE       15
             12 JUMP_FORWARD             0 (to 15)
        >>   15 LOAD_CONST               1 (None)
             18 RETURN_VALUE

i与常量值0明确比较,如您在第6 COMPARE_OP行上看到的那样。同时,对于后一种情况 -

dis.dis("if not i: pass")
  1           0 LOAD_NAME                0 (i)
              3 POP_JUMP_IF_TRUE         9
              6 JUMP_FORWARD             0 (to 9)
        >>    9 LOAD_CONST               0 (None)
             12 RETURN_VALUE

您会看到i的“真实性”已经过测试。 python中具有false-y值(00.0False,空字符串和空容器)的任何内容都被认为是False,因此结果表达式是True

您使用的内容取决于您要测试的内容。你想测试一个物体的假象吗?或者您想测试值是否为0?后者更具体,与语义角度略有不同。

哦,如果我们谈论表演,那么 -

%timeit if i == 0: pass
10000000 loops, best of 3: 51.4 ns per loop

%timeit if not i: pass
10000000 loops, best of 3: 39.1 ns per loop

not i不仅是pythonic,而且更快(尽管不是很多,结果可能因机器和python版本而异)。

答案 1 :(得分:1)

速度方面几乎没有差异,但==在我的系统上~3%1000比较循环上10**7运行时表现得更好if not i。此外,这是一个你不应该想到的优化,特别是使用python。

执行if i0之类的查询正在检查给定值的真实性。数字false的评分为true,小于或等于get的数字。 同样,在实际决定哪一个之前,如果您正在寻找具有特定值的 truthy 比较,您应该问自己一个问题。

答案 2 :(得分:1)

<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">

<div id="Wrapper">
  <textarea rows="2" cols="50" name="messages" class="message_box" placeholder="Write a message"></textarea>
  <span><i class="fa fa-paper-plane-o" aria-hidden="true" style="font-size: 20px;"></i></span>
</div>

仅在if i == 0 等于i0i时才会为真,而

False
if not i 为0,ii时,

为真,False为空集合时

根据你想要做的事情,一个可能比另一个好。

使用后一种解决方案可能会有非常轻微的性能优势,但这可以忽略不计。代码的清晰度和正确性更为重要。