可选参数更改堆栈

时间:2016-11-11 06:03:53

标签: python python-2.7

假设我将装饰器定义为:

from inspect import stack

def decorator():
    def wrapper(function):
        print stack()[1]
        return function
    return wrapper

当我定义一个没有像这样的可选参数的函数时:

@decorator()
def f(a):
    pass

它说第一行调用了包装器,打印出来:

(<frame object at 0x10bf9c3b0>, '<stdin>', 1, '<module>', None, None)

当我使用可选参数定义函数时:

@decorator()
def f(a=True):
    pass

它说第二行调用了包装器,打印出来:

(<frame object at 0x10bf08c58>, '<stdin>', 2, '<module>', None, None)

为什么可选参数会改变堆栈?是否有任何方法可以改变其中一个,以便它们与定义函数的方式相同(请记住装饰器和函数之间是否允许有空行)?

这似乎发生在我能找到的每个追溯函数中,以及python 3中(如果你当然更改了print语句)。

0 个答案:

没有答案