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

标签 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,代码有什么问题吗?

最佳答案

装饰器将函数作为参数传递给装饰器。如果您希望该函数执行,您的工作就是调用该函数:

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/

相关文章:

python - 使用 hstack 时矩阵格式错误?

python - Lucas-Kanade 方法的光流?

python - 如何在 Tensorflow2 中只保存张量而不是模型

Python(2.7)脚本监控和通知系统

python - RICH 格式化后无法重置颜色

oop - 在装饰器模式中添加状态

checkbox - 在 Zend Form 中使用 viewScript 装饰器时填充复选框

python - 理解装饰器函数中的作用域和 *args 和 **kwargs

django - 如何在Django中基于类的 View 中覆盖 `as_view`?

python - 在同一类的方法中使用类/静态方法作为默认参数值