我正在阅读python装饰器并发现它们非常有用,但我有一个混乱,我试图在谷歌和stackoverflow上搜索但是找不到好的答案,一个问题已经在stackoverflow上被问到相同的标题,但那个问题谈话关于@wrap和我的问题是不同的:
那么基本的装饰模板是什么:
def deco(x):
def wrapper(xx):
print("before the deco")
x(xx)
print("after the deco")
return wrapper
def new_func(a):
print("this is new function")
wow=deco(new_func)
print(wow(12))
结果如何:
before the deco
this is new function
after the deco
None
所以每当deco返回它调用包装函数时,现在我没有得到的是为什么我们使用包装器当我们的主要目标是将new_func作为参数传递给deco函数然后在deco函数中调用该参数,如果我尝试那么我可以在没有包装函数的情况下创建相同的东西:
def deco(x):
print("before the deco")
a=1
x(a)
print("after the deco")
def new_func(r):
print("this is new function")
wow=deco(new_func)
print(wow)
结果:
before the deco
this is new function
after the deco
None
那么装饰器中包装器的用途是什么?
答案 0 :(得分:0)
这是一个可能有帮助的问题。让我们改变new_func
吧
实际上使用它传递的参数。 e.g。
def new_func(r):
print("new_func r:", r)
假设我们还有another_func
将参数传递给new_func
:
def another_func():
new_func(999)
问题是,你怎么能写deco
以便
another_func
继续工作,没有任何变化,new_func
收到从another_func