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

问题描述 投票:1回答:3

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

if i == 0:
    ...

要么

if not i:
    ...

可以说第一个更清楚,但是有没有产生不同结果或者表现更好的情况?

python evaluation
3个回答
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
投票

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

if not iif i这样的查询正在检查给定值的真实性。其中0的数量评估为falsetrue的数量更小或更大。再次,在实际决定哪一个之前,你应该问自己一个问题,如果你正在寻找真实或具有特定价值的比较。


1
投票
if i == 0

只有当i等于0或当iFalse时才会成立,而

if not i

i为0时,iFalse,但是当i是一个空集合时,它将是真的。

取决于你想要做什么,一个可能比另一个好。

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

© www.soinside.com 2019 - 2024. All rights reserved.