python中跳转语句_用IF语句向前跳还是绝对跳转?Python 2.5

我一直在使用“dis”模块来重新编写一些已编译的脚本(.pyc)。我明白向前跳和绝对跳之间的区别。据我所知,IF语句将以跳转结束:>>> def f():

if a:

print ''

>>> from dis import dis

>>> dis(f)

2 0 LOAD_GLOBAL 0 (a)

3 JUMP_IF_FALSE 9 (to 15)

6 POP_TOP

3 7 LOAD_CONST 1 ('')

10 PRINT_ITEM

11 PRINT_NEWLINE

12 JUMP_FORWARD 1 (to 16)

>> 15 POP_TOP

>> 16 LOAD_CONST 0 (None)

19 RETURN_VALUE

如果if语句在另一个循环的末尾,则会出现JUMP_ABSOLUTE。例如:

^{pr2}$

从我正在阅读的字节码写回代码时,有一个跳转绝对值让我吃惊:121 228 LOAD_FAST 11 (a)

231 LOAD_CONST 9 (100)

234 COMPARE_OP 0 (

237 JUMP_IF_FALSE 23 (to 263)

240 POP_TOP

241 LOAD_FAST 11 (b)

244 LOAD_CONST 11 (10)

247 COMPARE_OP 4 (>)

250 JUMP_IF_FALSE 10 (to 263)

253 POP_TOP

122 254 LOAD_CONST 3 (1)

257 STORE_FAST 4 (ok)

260 JUMP_ABSOLUTE 27

>> 263 POP_TOP

我认为代码如下:if a<100 and b>10:

ok=1

但它会激起一个向前跳,而不是绝对的跳跃。我知道它不是WHILE循环,也不是FOR语句,因为它们都在字节码中创建了一个SETUP\u循环行。在

我的问题是:我错过了什么?为什么我要向前跳而不是绝对跳跃?在

编辑:索引27的绝对跳转指向a(WHILE?)这两条线路121和122属于的环路:106 24 SETUP_LOOP 297 (to 324)

>> 27 LOAD_FAST 4 (ok)

30 LOAD_CONST 1 (0)

33 COMPARE_OP 2 (==)

36 JUMP_IF_FALSE 283 (to 322)

39 POP_TOP

在这些行之前有一个IF语句,后面有一个IF语句。下面是前面的代码,用同样的JUMP_绝对结束语句。在115 170 LOAD_FAST 3 (q)

173 LOAD_CONST 10 (1)

176 COMPARE_OP 0 (

179 JUMP_IF_FALSE 45 (to 227)

182 POP_TOP

183 LOAD_FAST 11 (z)

186 LOAD_CONST 11 (10)

189 COMPARE_OP 4 (>)

192 JUMP_IF_FALSE 32 (to 227)

195 POP_TOP

116 196 LOAD_CONST 1 (0)

199 STORE_FAST 4 (ok)

117 202 LOAD_FAST 5 (u)

205 LOAD_CONST 3 (1)

208 BINARY_ADD

209 STORE_FAST 5 (u)

118 212 LOAD_CONST 1 (0)

215 STORE_FAST 3 (k)

119 218 LOAD_CONST 3 (10)

221 STORE_FAST 6 (dv)

224 JUMP_ABSOLUTE 27

>> 227 POP_TOP

向前跳转表示“转到下一行”,绝对跳转表示“返回WHILE循环的开始”。问题是我不知道如何复制一个与上述字节码相同的代码。在

谢谢你!在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值