用到的代码:
# if_control.py
a = 1
if a > 10:
prin "a > 10"
elif a <= -2:
print "a <= -2"
elif a != 1:
print "a != 1"
elif a == 1:
print "a == 1"
else:
print "Unknown a"if_control.py 对应的字节码:
1 0 LOAD_CONST 0 (1)
3 STORE_NAME 0 (a)
2 6 LOAD_NAME 0 (a)
9 LOAD_CONST 1 (10)
12 COMPARE_OP 4 (>)
15 JUMP_IF_FALSE 9 (to 27)
18 POP_TOP
3 19 LOAD_CONST 2 ('a > 10')
22 PRINT_ITEM
23 PRINT_NEWLINE
24 JUMP_FORWARD 72 (to 99)
>> 27 POP_TOP
4 28 LOAD_NAME 0 (a)
31 LOAD_CONST 3 (-2)
34 COMPARE_OP 1 (<=)
37 JUMP_IF_FALSE 9 (to 49)
40 POP_TOP
5 41 LOAD_CONST 4 ('a <= -2')
44 PRINT_ITEM
45 PRINT_NEWLINE
46 JUMP_FORWARD 50 (to 99)
>> 49 POP_TOP
6 50 LOAD_NAME 0 (a)
53 LOAD_CONST 0 (1)
56 COMPARE_OP 3 (!=)
59 JUMP_IF_FALSE 9 (to 71)
62 POP_TOP
7 63 LOAD_CONST 5 ('a != 1')
66 PRINT_ITEM
67 PRINT_NEWLINE
68 JUMP_FORWARD 28 (to 99)
>> 71 POP_TOP
8 72 LOAD_NAME 0 (a)
75 LOAD_CONST 0 (1)
78 COMPARE_OP 2 (==)
81 JUMP_IF_FALSE 9 (to 93)
84 POP_TOP
9 85 LOAD_CONST 6 ('a == 1')
88 PRINT_ITEM
89 PRINT_NEWLINE
90 JUMP_FORWARD 6 (to 99)
>> 93 POP_TOP
11 94 LOAD_CONST 7 ('Unknown a')
97 PRINT_ITEM
98 PRINT_NEWLINE
>> 99 LOAD_CONST 8 (None)
102 RETURN_VALUE
None用到的代码:
// for_control.py
lst = [1, 2]
for i in lst:
print i对应的字节码:
1 0 LOAD_CONST 0 (1)
3 LOAD_CONST 1 (2)
6 BUILD_LIST 2
9 STORE_NAME 0 (lst)
2 12 SETUP_LOOP 19 (to 34)
15 LOAD_NAME 0 (lst)
18 GET_ITER
>> 19 FOR_ITER 11 (to 33)
22 STORE_NAME 1 (i)
3 25 LOAD_NAME 1 (i)
28 PRINT_ITEM
29 PRINT_NEWLINE
30 JUMP_ABSOLUTE 19
>> 33 POP_BLOCK
>> 34 LOAD_CONST 2 (None)
37 RETURN_VALUE
None用到的代码:
// while_control.py
i = 0
while i < 10:
i += 1
if i >= 5:
continue
if i == 20:
break
print i对应的字节码:
1 0 LOAD_CONST 0 (0)
3 STORE_NAME 0 (i)
2 6 SETUP_LOOP 71 (to 80)
>> 9 LOAD_NAME 0 (i)
12 LOAD_CONST 1 (10)
15 COMPARE_OP 0 (<)
18 JUMP_IF_FALSE 57 (to 78)
21 POP_TOP
3 22 LOAD_NAME 0 (i)
25 LOAD_CONST 2 (1)
28 INPLACE_ADD
29 STORE_NAME 0 (i)
4 32 LOAD_NAME 0 (i)
35 LOAD_CONST 3 (5)
38 COMPARE_OP 5 (>=)
41 JUMP_IF_FALSE 7 (to 51)
44 POP_TOP
5 45 JUMP_ABSOLUTE 9
48 JUMP_FORWARD 1 (to 52)
>> 51 POP_TOP
6 >> 52 LOAD_NAME 0 (i)
55 LOAD_CONST 4 (20)
58 COMPARE_OP 2 (==)
61 JUMP_IF_FALSE 5 (to 69)
64 POP_TOP
7 65 BREAK_LOOP
66 JUMP_FORWARD 1 (to 70)
>> 69 POP_TOP
8 >> 70 LOAD_NAME 0 (i)
73 PRINT_ITEM
74 PRINT_NEWLINE
75 JUMP_ABSOLUTE 9
>> 78 POP_TOP
79 POP_BLOCK
>> 80 LOAD_CONST 5 (None)
83 RETURN_VALUE