如何从Python装饰器内部访问装饰方法的局部变量(locals())?

这是我需要的:

假设我有这个装饰器:

def deco(func):
    def decoret(*args, **kwargs):
        print(func.__locals__) # I know __locals__ is not valid, but I need something like this
    return decoret

@deco
def func():
    test1 = 123
    test2 = 456

func()

我想获取所有局部变量的列表(就像我在函数内部调用locals()一样),这样我就可以在装饰器的decoret函数中访问带有test1和test2值的字典.

我知道我可以通过使用Python inspect module来做到这一点,但是我无法追踪正确的框架来获得该功能.

另外,我正在使用Python 3.2 CPython.

解决方法:

在执行之前,函数中没有任何局部变量.装饰后唯一可用的东西就是定义后的东西.

d = 'd'
def a(d=d):
    b = 'b'
    c = 'c'

print a.__dict__
# {}
print a.b
# AttributeError: 'function' object has no attribute 'b'
print dir(a)
# Doesn't print anything
上一篇:使用装饰器和通过继承扩展子类之间有什么区别?


下一篇:JavaScript-Typescript:属性不存在