我认为这in只是一个表现__contains__
In [1]: li = [1, 2, 3, 4, 5]
In [2]: 4 in li
Out[2]: True
In [3]: li.__contains__(4)
Out[3]: True
Run Code Online (Sandbox Code Playgroud)
但in速度要快2倍
In [4]: %timeit 4 in li
10000000 loops, best of 3: 103 ns per loop
In [5]: %timeit li.__contains__(4)
The slowest run took 10.06 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 213 ns per loop
Run Code Online (Sandbox Code Playgroud)
你能解释两者之间的差异in吗?为什么更快?
可能同样的原因{}是为了更快dict().方法调用引入了额外的开销:
>>> from dis import dis
>>> li = [1, 2, 3, 4, 5]
>>> c = lambda: 4 in li
>>> d = lambda: li.__contains__(4)
>>> dis(c)
1 0 LOAD_CONST 1 (4)
3 LOAD_GLOBAL 0 (li)
6 COMPARE_OP 6 (in)
9 RETURN_VALUE
>>> dis(d)
1 0 LOAD_GLOBAL 0 (li)
3 LOAD_ATTR 1 (__contains__)
6 LOAD_CONST 1 (4)
9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
12 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
见CALL_FUNCTION后面的例子.