Python装饰器跳过装饰函数的代码

时间:2019-05-25 15:30:19

标签: python decorator

此代码跳过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,代码出了什么问题?

1 个答案:

答案 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`