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

是使用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的动态性,在一般情况下这是不可能的。 但是我可以涵盖部分案例吗?

仅供参考:“您是个白痴,为什么您会认为能够告诉另一个功能调用了哪些功能,而我却想不出它为什么会有用的任何原因,因此它一定对您没有用。”是可以的回应。 我想知道。

===============>>#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” ...

总的来说,我不认为您想在生产代码中做类似的事情……

  ask by Paul Draper translate from so

未解决问题?本站智能推荐:

2回复

使用python inspect来查看函数中的局部变量

我无法弄清楚如何使用inspect / inspect_shell检查当前正在执行的函数 我猜它涉及使用getinnerframe和getouterframe遍历框架层次结构,但我对几个问题感到困惑。 给出这个例子nine.py: 我想检查x的值,甚至可能更改它以使函数返回并
1回复

如何检查函数/方法采用哪些参数? [重复]

这个问题在这里已有答案: 如何读取函数的签名,包括默认参数值? 8个答案 为了保持几个模块,我在Python中构建有点一致,我想做一些自动代码检查。 为此,我想检查模块的功能和函数所采用的参数。 我可以使用hasattr()来检查模块是否实际包含预期的函数。
1回复

Python如何获取调用函数(不仅仅是它的名字)?

我想编写一个返回调用函数的函数: def foo(): return get_calling_function() #should return 'foo' function object 网上有很多例子如何获取调用函数的名称 ,但不知道如何获取实际的对象。 我想出了以下获得名
4回复

在Python中反思给定函数的嵌套(本地)函数

鉴于功能 有没有办法让我以我可以调用它们的方式访问它的本地get()和post()函数? 我正在寻找一个可以使用上面定义的函数f()的函数: 我可以访问那些本地函数的代码对象 结果 但我无法弄清楚如何获得实际可调用的函数对象。 这甚至可能吗? 谢谢你的帮
1回复

Python:跟踪python函数激活的源代码行

我知道如何使用inspect module via在源代码中找到python函数的位置 但是, 当 python函数正在运行时,或者在运行之后,如何找到它在单独运行期间使用/引用的所有源代码片段? 例如,如果我运行random_function(arg1=1, arg2=2)与ra
2回复

从装饰器获取Python函数的拥有类

我在PY有一个装饰师。 它是一种方法,并将该函数作为参数。 我想基于传递的函数创建一个基于目录的结构。 我使用父目录的模块名称,但希望使用类名作为子目录。 我无法弄清楚如何获取拥有fn对象的类的名称。 我的装饰者:
9回复

使用字典选择要执行的函数

我正在尝试使用函数式编程来创建包含键和要执行的函数的字典: 现在,我已经看到用于在模块中查找已定义函数的代码,我需要执行以下操作: 所以我的问题是,如何制作所有Exec函数的列表,然后使用字典将它们分配给所需的项目? 所以最后我会有myDict["P1"]() #this wi
1回复

Python函数内省:在其中提到了作为参数传递的类的成员?

假设我有以下功能: 我希望有一个更高阶的函数能够内省传递的函数,并通过点语法检索代码中提到的参数成员,具有以下行为: 可以这样做吗? 怎么样?
1回复

从多个Python文件生成函数调用树

我继承了许多Python文件,并通过收集有关这些文件中已定义和调用的所有函数的信息,寻求一种了解其中发生的情况的方法。 文件示例(MainModule.py): 通过查看此文件,我希望IDE报告该文件中定义了哪些功能(这是我使用Wing IDE可以执行的操作),还报告了哪些功能(在
1回复

Python可能会短路函数调用

我正在构建一个函数来构造具有设置属性的对象(类似于namedtuple); 但是,输出长度必须可变。 我想构建一个函数,该函数允许用户通过函数调用附加其他属性。 重要的是,我想找到一种“短路”参数的方法,并且不确定Python是否足够强大。 为了说明这个简单的例子: Fo