此代码跳过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,代码出了什么问题?
答案 0 :(得分:5)
装饰器将函数作为参数传递给装饰器。如果要执行该函数,则是您的工作:
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`