假设我在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
答案 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