gpt4 book ai didi

python - 获取在 python 函数中使用/调用的函数列表

转载 作者:太空狗 更新时间:2023-10-29 20:57:36 25 4
gpt4 key购买 nike

是否有任何工具/库可以列出在另一个方法/函数中调用的方法/函数列表?

例如:如果该工具或库针对以下方法运行

def calculate(a: int, b: int, operator: Operator):
if operator == Operator.add:
add(a, b)
elif operator == Operator.subtract
subtract(a, b)

然后它应该返回

1. add
2. subtract

这个问题和this one几乎一样但它适用于 Java。

这与 PyCharmFind Usage 所做的基本相同。谢谢!

最佳答案

这似乎可以完成工作:

import dis
def list_func_calls(fn):
funcs = []
bytecode = dis.Bytecode(fn)
instrs = list(reversed([instr for instr in bytecode]))
for (ix, instr) in enumerate(instrs):
if instr.opname=="CALL_FUNCTION":
load_func_instr = instrs[ix + instr.arg + 1]
funcs.append(load_func_instr.argval)

return ["%d. %s" % (ix, funcname) for (ix, funcname) in enumerate(reversed(funcs), 1)]

例子:

>>> list_func_calls(calculate)
['1. add', '2. subtract']

这里发生的事情是:

  1. 我们创建一个函数的字节码对象
  2. 我们反转指令列表,因为函数名将按照函数调用
  3. 我们遍历列表,对于每个 CALL_FUNCTION 指令,

  4. 我们使用指令arg参数来告诉我们有多少我们得到的参数

  5. 我们回头看看加载函数的指令我们打电话

  6. 我们将该函数的名称 (instr.argval) 添加到一个列表中,然后我们以请求的格式反向、枚举和返回

请注意,自 Python 3.6 以来,有三个 CALL_FUNCTION 指令,因此您必须查看文档以扩展此示例以使其在当前 python 中完全正常运行

关于python - 获取在 python 函数中使用/调用的函数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51901676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com