Python虚拟机之for循环控制流(二)
Python虚拟机中的for循环控制流 在 Python虚拟机之if控制流(一) 这一章中,我们了解if控制流的字节码实现,在if控制结构中,虽然Python虚拟机会在不同的分支摇摆,但大体还是向前执行,但是在for循环控制结构中,我们将会看到一种新的指令跳跃方式,即指令回退。在 if控制流 章节中,我们看到了指令跳跃时,通常跳跃的距离都是当前指令与目标指令之间的距离。如果按照这种逻辑,进行回退时,这个跳跃是否是负数呢?别急,我们下面一点一点来剖析for循环控制流的实现 # cat demo3.py lst = [1, 2] for i in lst: print(i) # python2.5 …… >>> source = open("demo3.py").read() >>> co = compile(source, "demo3.py", "exec") >>> import dis >>> dis.dis(co) 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