查找函数所有函数调用的最佳方法是什么?我想在运行时(可能是装饰器)这样做。
是使用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的动态性,在一般情况下这是不可能的。但我可以覆盖一些案例吗?
仅供参考:“你是个白痴,为什么你会想到能够告诉另一个函数调用哪些函数,我想不出有什么理由为什么它会有用,所以它一定没用为你“是一个很好的回应。我想知道。
答案 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”......
总的来说,我不认为你想在生产代码中做这样的事情......