|
|
发表于 2018-4-14 15:56:48
|
显示全部楼层
>>> import dis
>>> def foo():
a = [0,0,-1,0]
for i in range(len(a)):
while i<len(a) and a[i]<=0:
print(i, a[i])
i = i + 1
>>> dis.dis(foo)
2 0 LOAD_CONST 1 (0)
2 LOAD_CONST 1 (0)
4 LOAD_CONST 3 (-1)
6 LOAD_CONST 1 (0)
8 BUILD_LIST 4
10 STORE_FAST 0 (a)
3 12 SETUP_LOOP 72 (to 86)
14 LOAD_GLOBAL 0 (range)
16 LOAD_GLOBAL 1 (len)
18 LOAD_FAST 0 (a)
20 CALL_FUNCTION 1
22 CALL_FUNCTION 1
24 GET_ITER
>> 26 FOR_ITER 56 (to 84)
28 STORE_FAST 1 (i)
4 30 SETUP_LOOP 50 (to 82)
>> 32 LOAD_FAST 1 (i)
34 LOAD_GLOBAL 1 (len)
36 LOAD_FAST 0 (a)
38 CALL_FUNCTION 1
40 COMPARE_OP 0 (<)
42 POP_JUMP_IF_FALSE 80
44 LOAD_FAST 0 (a)
46 LOAD_FAST 1 (i)
48 BINARY_SUBSCR
50 LOAD_CONST 1 (0)
52 COMPARE_OP 1 (<=)
54 POP_JUMP_IF_FALSE 80
5 56 LOAD_GLOBAL 2 (print)
58 LOAD_FAST 1 (i)
60 LOAD_FAST 0 (a)
62 LOAD_FAST 1 (i)
64 BINARY_SUBSCR
66 CALL_FUNCTION 2
68 POP_TOP
6 70 LOAD_FAST 1 (i)
72 LOAD_CONST 2 (1)
74 BINARY_ADD
76 STORE_FAST 1 (i)
78 JUMP_ABSOLUTE 32
>> 80 POP_BLOCK
>> 82 JUMP_ABSOLUTE 26
>> 84 POP_BLOCK
>> 86 LOAD_CONST 0 (None)
88 RETURN_VALUE |
|