关于python:哪个更快? 如果x不在,则在OR中不是x

Which is faster? if not x in OR if x not in

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
if not 7 in [5, 6, 7]:
     # something

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

哪个更快?


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

1
2
3
4
5
6
7
8
9
10
>>> 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)也不会改变,除非您在括号中添加更多内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> 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进行测试。


它完全一样,没有任何区别。 标准运算符实际上是not in(参见文档),not 7 in表单将自动转换为7 not in

所以推荐的方法是if 7 not in [5, 6, 7],这是对操作符的直接使用,并且还提高了可读性。