擅长:python、mysql、java
<p>例如,此函数有一个跳转:</p>
<pre><code>def f(x):
if x > 0: # This will jump to "return 2" if not x > 0
return 1
else:
return 2
</code></pre>
<p>请看这里:</p>
<pre><code>>>> dis.disco(f.__code__)
2 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (0)
6 COMPARE_OP 4 (>)
9 POP_JUMP_IF_FALSE 16
3 12 LOAD_CONST 2 (1)
15 RETURN_VALUE
5 >> 16 LOAD_CONST 3 (2)
19 RETURN_VALUE
20 LOAD_CONST 0 (None)
23 RETURN_VALUE
</code></pre>
<p>在<code>9 POP_JUMP_IF_FALSE 16</code>中有一个跳转到16</p>
<p>因此,<code>findlabels</code>找到跳转目标:</p>
<pre><code>>>> dis.findlabels(f.__code__.co_code)
[16]
</code></pre>