此代码跳过 number
函数中的代码:
def some_decorator(x):
def wrapper(x):
return x+1
return wrapper
@some_decorator
def number(x):
x = x + 100
return x
输出:
>>> number(3)
4
我试图使 number(3)
的输出为 104,代码有什么问题吗?
最佳答案
装饰器将函数作为参数传递给装饰器。如果您希望该函数执行,您的工作就是调用该函数:
def some_decorator(fn):
def wrapper(x):
return fn(x) + 1 # call the function and add 1
return wrapper
@some_decorator
def n(x):
x = x + 100
return x
n(3) # 104
顺便说一句,使用 functools.wraps
通常很有用。使包装的函数按预期运行:
from functools import wraps
def some_decorator(fn):
@wraps(fn)
def wrapper(x):
return fn(x) + 1
return wrapper
@some_decorator
def n(x):
x = x + 100
return x
print(n.__name__) # now prints `n` instead of `wrapper`
关于Python装饰器跳过被装饰函数的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56306230/