0

查找函数进行的所有函数调用的最佳方法是什么?我想在运行时执行此操作(可能使用装饰器)。

是检索源代码的最佳方法inspect(这意味着我将不得不访问源代码......所以没有交互式解释器支持)然后用 解析它ast?有没有更好的办法?

首选 Python 2.7,但不是必需的。我希望它足够简单,可以自己做。如果其他人已经做到了,我会查看源代码以便弄清楚。

最终,我只会对使用特定装饰器的函数调用感兴趣,但在 SO 上已经有这部分的答案。

编辑:

def f():
    return g(1)


@Interesting
def g(x):
    return x + 1

print what_interesting_functions_does_this_call(f)

印刷

(<function g at 0x7f2a1ec72a28>,)

我现在意识到,由于 Python 的动态性,这在一般情况下是不可能的。但我可以涵盖一些案例吗?

仅供参考:“你是个白痴,你为什么会认为能够分辨出另一个函数调用了哪些函数,我想不出任何理由为什么这会有用,因此它一定对你没有用”是一个好的回应。我想知道。

4

1 回答 1

0
>>> def a():
...    float("1.2")
...    int("1")
...    b()
...
>>> def b():
...    sum([1,2,3])
...
>>> a()
>>> import dis
>>> dis
<module 'dis' from 'C:\Python26\lib\dis.pyc'>
>>> dis.dis(a)
  2           0 LOAD_GLOBAL              0 (float)
              3 LOAD_CONST               1 ('1.2')
              6 CALL_FUNCTION            1
              9 POP_TOP

  3          10 LOAD_GLOBAL              1 (int)
             13 LOAD_CONST               2 ('1')
             16 CALL_FUNCTION            1
             19 POP_TOP

  4          20 LOAD_GLOBAL              2 (b)
             23 CALL_FUNCTION            0
             26 POP_TOP
             27 LOAD_CONST               0 (None)
             30 RETURN_VALUE
>>>

你可以只计算“CALL_FUNCTION”......

一般来说,我不认为你想在生产代码中做这样的事情......

于 2013-04-16T16:25:55.780 回答