如何从另一个函数中截取函数中的变量

时间:2015-04-15 22:31:10

标签: python abstract-syntax-tree intercept

假设我在test.py中有这样的函数:

from math import sqrt

def a():
    intermediate_val = sqrt(4)
    return 5

def b():
    another_val = sqrt(9)
    return 8

我想编写一个查看a()和b()的函数,并返回对sqrt()进行的任何调用的结果,而不修改原始代码(装饰器就可以了)。像这样:

import test

def intercept_value(fnc, intercept_fnc):
    # What goes here?

intercept_value('a', 'sqrt') == 2  # True
intercept_value('b', 'sqrt') == 3  # True

1 个答案:

答案 0 :(得分:0)

这是一种简单的方法来做你想要的。它的缺点是需要调整源代码。另一个缺点是它只适用于分配给变量的函数的输出 - 例如,它不适用于sqrt中的x = sum(sqrt(some_array))

我确定这不是你问题的最佳答案,但这是一个开始。

源代码:

from math import sqrt

def a(intercept=None):
    intermediate_val = sqrt(4)
    if intercept is not None:
        return locals()[intercept]
    return 5

def b(intercept=None):
    another_val = sqrt(9)
    if intercept is not None:
        return locals()[intercept]
    return 8

测试代码:

import test

def intercept_value(fnc, intercept_var):
    return fnc(intercept=intercept_var)

intercept_value(test.a, 'intermediate_val') == 2  # True
intercept_value(test.b, 'another_val') == 3  # True