2

刚刚发现这两种语法方式都是有效的。

哪个更有效率?

element not in list

或者:

not element in list

?

4

2 回答 2

8

它们的行为相同,以至于产生相同的字节码;它们同样有效。也就是说,element not in list通常被认为是首选。PEP8 没有关于 vs. 的具体建议not ... in... not in但它对not ... isvs.有具体建议,... is not而且它更喜欢后者

使用is not运算符而不是not ... is. 虽然这两个表达式在功能上是相同的,但前者更具可读性和更受欢迎。

为了显示性能等效,快速字节码检查:

>>> import 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
于 2018-08-28T00:54:13.127 回答
0

当你在做:

not x in y

如果x是 in y,它将基本上简化not True为:

>>> not True
False

另一方面x not in y只是直接检查not in

要查看时间(总是非常相似):

>>> import timeit
>>> timeit.timeit(lambda: 1 not in [1,2,3])
0.24575254094870047
>>> timeit.timeit(lambda: not 1 in [1,2,3])
0.23894292154022878
>>> 

另外顺便说一句,not基本上只是做相反的事情(如果某事是真的,不会让它成为假的,与相反的相同点

not运营商

于 2018-08-28T01:52:53.643 回答