Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dis.findlabels()做什么?_Python - Fatal编程技术网

Python dis.findlabels()做什么?

Python dis.findlabels()做什么?,python,Python,我在玩dis库来收集关于函数的信息(比如它调用的其他函数)。的文档听起来像是它会返回其他函数调用,但我已经尝试了一些函数,它总是返回一个空列表 这个函数应该做什么?您将如何使用它?跳转目标由反汇编输出中的注释 例如,在: def f(i): if i == 1: return 1 elif i == 2: return 2 dis.dis(f)显示: 2 0 LOAD_FAST 0 (i)

我在玩
dis
库来收集关于函数的信息(比如它调用的其他函数)。的文档听起来像是它会返回其他函数调用,但我已经尝试了一些函数,它总是返回一个空列表


这个函数应该做什么?您将如何使用它?

跳转目标由反汇编输出中的
注释

例如,在:

def f(i):
    if i == 1:
        return 1
    elif i == 2:
        return 2
dis.dis(f)
显示:

  2           0 LOAD_FAST                0 (i)
              3 LOAD_CONST               1 (1)
              6 COMPARE_OP               2 (==)
              9 POP_JUMP_IF_FALSE       16

  3          12 LOAD_CONST               1 (1)
             15 RETURN_VALUE        

  4     >>   16 LOAD_FAST                0 (i)
             19 LOAD_CONST               2 (2)
             22 COMPARE_OP               2 (==)
             25 POP_JUMP_IF_FALSE       32

  5          28 LOAD_CONST               2 (2)
             31 RETURN_VALUE        
        >>   32 LOAD_CONST               0 (None)
             35 RETURN_VALUE        

dis.findlabels(f.\uuuu code\uuuu.co\u code)
返回
[16,32]

跳转目标由反汇编输出中的
>
注释

例如,在:

def f(i):
    if i == 1:
        return 1
    elif i == 2:
        return 2
dis.dis(f)
显示:

  2           0 LOAD_FAST                0 (i)
              3 LOAD_CONST               1 (1)
              6 COMPARE_OP               2 (==)
              9 POP_JUMP_IF_FALSE       16

  3          12 LOAD_CONST               1 (1)
             15 RETURN_VALUE        

  4     >>   16 LOAD_FAST                0 (i)
             19 LOAD_CONST               2 (2)
             22 COMPARE_OP               2 (==)
             25 POP_JUMP_IF_FALSE       32

  5          28 LOAD_CONST               2 (2)
             31 RETURN_VALUE        
        >>   32 LOAD_CONST               0 (None)
             35 RETURN_VALUE        

dis.findlabels(f.\uuuu code\uuuu.co\u code)
返回
[16,32]
例如,此函数有一个跳转:

def f(x):
    if x > 0:     # This will jump to "return 2" if not x > 0
        return 1
    else:
        return 2
请看这里:

>>> 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
如果为假16,则在
9中有一次跳转到16

因此,
findlabels
查找跳转目标:

>>> dis.findlabels(f.__code__.co_code)
[16]

例如,此函数有一个跳转:

def f(x):
    if x > 0:     # This will jump to "return 2" if not x > 0
        return 1
    else:
        return 2
请看这里:

>>> 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
如果为假16,则在
9中有一次跳转到16

因此,
findlabels
查找跳转目标:

>>> dis.findlabels(f.__code__.co_code)
[16]

使用
dis.findlabels(f.\uu-code\uu.co\u-code)
并确保f中有一个跳转目标(例如for循环中的条件中断语句)使用
dis.findlabels(f.\uu-code\uu.co\u-code)
并确保f中有一个跳转目标(例如for循环中的条件中断语句)哈哈,这与我的示例几乎相同。英雄所见略同,对吧?;)你能解释一下反汇编中的数字指的是什么吗?@wim第一列:行号;第3列:字节码偏移量,第5列:字节码参数(可能是字节码偏移量)。这些被称为标签有什么原因吗?为什么不直接称它为find_jump_targets呢?@InAFlash它几乎肯定来自C,其中
goto
(或者
开关中的
case
)的目标被称为标签。哈哈,这与我的示例几乎相同。英雄所见略同,对吧?;)你能解释一下反汇编中的数字指的是什么吗?@wim第一列:行号;第3列:字节码偏移量,第5列:字节码参数(可能是字节码偏移量)。这些被称为标签有什么原因吗?为什么不直接称它为find_jump_targets呢?@InAFlash它几乎肯定来自C,在C中,
goto
(或者
开关中的
case
)的目标称为标签。