通过函数查找所有函数调用

时间:2013-04-16 16:13:16

标签: python function inspect code-inspection

查找函数所有函数调用的最佳方法是什么?我想在运行时(可能是装饰器)这样做。

是使用inspect检索源代码的最佳方法(这意味着我必须能够访问源代码...所以没有交互式解释器支持),然后用{{1}解析它}?还有更好的方法吗?

Python 2.7首选,但不是必需的。我希望自己做得很简单。如果其他人已经这样做了,我会看一下源代码,这样我就可以搞清楚了。

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

编辑:

ast

打印

def f():
    return g(1)


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

print what_interesting_functions_does_this_call(f)

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

仅供参考:“你是个白痴,为什么你会想到能够告诉另一个函数调用哪些函数,我想不出有什么理由为什么它会有用,所以它一定没用为你“是一个很好的回应。我想知道。

1 个答案:

答案 0 :(得分: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”......

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