刚刚发现两种语法方式都是有效的。
哪个效率更高?
element not in list
或:
not element in list
?
它们的行为相同,以至于产生相同的字节码;它们同样高效。也就是说,element not in list
通常被认为是首选。PEP8 没有关于not ... in
与... not in
,但它适用于not ... is
与... 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
当你在做:
not x in y
如果x
在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
运算符