@
lance6716 #14 其实我的版本是 py3.6.5
In [1]: import dis
In [2]: dis.dis("[a for a in [1,23,3]]")
1 0 LOAD_CONST 0 (<code object <listcomp> at 0x7f39be9236f0, file "<dis>", line 1>)
2 LOAD_CONST 1 ('<listcomp>')
4 MAKE_FUNCTION 0
6 LOAD_CONST 5 ((1, 23, 3))
8 GET_ITER
10 CALL_FUNCTION 1
12 RETURN_VALUE
In [3]:
这个应该是你看到的样子。
我们看到 CALL_FUNCTION 运行的就是前面 MAKE_FUNCTION 产生的结果。
然而产生的这个函数的字节码是下面这个样子的所以我说的没有问题。
In [10]: dis.dis(x)
1 0 BUILD_LIST 0
2 LOAD_FAST 0 (.0)
>> 4 FOR_ITER 8 (to 14)
6 STORE_FAST 1 (x)
8 LOAD_FAST 1 (x)
10 LIST_APPEND 2
12 JUMP_ABSOLUTE 4
>> 14 RETURN_VALUE