这是我需要的:
假设我有这个装饰器:
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