我似乎无法弄清楚下面的代码是否没有将 demovar 暴露给装饰函数:
def exposebasevar(function):
def decorator(*args, **kwargs):
demovar = 'Where am I?' # => or MyThreadSafeObjectHandle()
return function(*args, **kwargs)
return decorator
@exposebasevar
def usesexposedvariable():
print demovar # this line will give an error
usesexposedvariable()
背景:我有一个带有一个全局变量的模块,每个函数都使用它。现在我想让那个线程安全,所以我想通过装饰器使这个 var 可用。然后在装饰器中,我可以找出对象的哪个实例属于线程并将其传递进去。这样我就不需要更改每个函数的签名或内容。
有人知道如何设置吗?谢谢。