哪个更快?如果不是x in或者x如果不在

时间:2019-02-21 11:34:58

标签: python python-3.x if-statement optimization

if not 7 in [5, 6, 7]:
     # something

if 7 not in [5, 6, 7]:
    # something

哪个更快?

2 个答案:

答案 0 :(得分:4)

它们完全相同,因此花费相同的时间。 not in只是语法糖。使用dis模块,我们可以看到两者导致的字节码相同:

>>> dis.dis("not x in y")
  1           0 LOAD_NAME                0 (x)
              2 LOAD_NAME                1 (y)
              4 COMPARE_OP               7 (not in)
              6 RETURN_VALUE
>>> dis.dis("x not in y")
  1           0 LOAD_NAME                0 (x)
              2 LOAD_NAME                1 (y)
              4 COMPARE_OP               7 (not in)
              6 RETURN_VALUE

即使将括号添加为not (x in y)也不会改变它,除非您当然要在括号中添加更多:

>>> dis.dis("not (x in y)")
  1           0 LOAD_NAME                0 (x)
              2 LOAD_NAME                1 (y)
              4 COMPARE_OP               7 (not in)
              6 RETURN_VALUE
>>> dis.dis("not (x in y or z)")
  1           0 LOAD_NAME                0 (x)
              2 LOAD_NAME                1 (y)
              4 COMPARE_OP               6 (in)
              6 JUMP_IF_TRUE_OR_POP     10
              8 LOAD_NAME                2 (z)
        >>   10 UNARY_NOT
             12 RETURN_VALUE

使用Python 3.6.7和2.7.15进行了测试。

答案 1 :(得分:1)

完全相同,完全没有区别。标准运算符实际上是not in(请参阅docs),not 7 in格式将自动转换为7 not in

因此推荐的方法是if 7 not in [5, 6, 7],这是操作符的直接用法,并且具有提高的可读性。