gpt4 book ai didi

python - 作为装饰器参数的变量

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:15 25 4
gpt4 key购买 nike

我发现装饰器参数是在装饰器定义时传递的,而不是像函数那样调用。

现在我想知道是否有可能让装饰器像这样在运行时获取变量的值,装饰器应该打印状态的当前值而不是它在定义时指向的值:

def deco(msg):
def decorater(func):
def wrapper(*args, **kwargs):
print msg
func(*args, **kwargs)
return wrapper
return decorater


def func():
local = {
"state": None
}

@deco(local["state"])
def test():
pass

def setState(newState):
local["state"] = newState

setState("start")
test()
setState("test")
test()

func()

最佳答案

在您的示例中,deco() 是一个装饰器工厂;您正在创建装饰器,然后将立即调用它。更一般地说,您在定义您正在装饰的函数时调用装饰器。

您可以通过不传入 state 并从 wrapper() 中将其作为全局访问来进行最小的更改,在在这种情况下你不需要 deco();你可以直接使用@decorator。也就是说,我认为有更好的方法来完成您想要做的事情。

关于python - 作为装饰器参数的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32192981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com