如何在Python中添加变量时修饰函数

时间:2012-12-06 15:30:45

标签: python decorator

我正在尝试用Python构建一个装饰器,我在装饰阶段添加一个变量。我知道如何编写一个装饰器,我只是在另一个函数的结果上运行一个函数,但是我在添加一个额外变量的语法上遇到了麻烦。基本上,我想采用这个点积函数:

def dot(x,y):
    temp1=[]
    for i in range(len(x)):
        temp1.append(float(x[i])*y[i])
    tempdot=sum(temp1)
    return tempdot 

并从结果中减去值'b',在给定参数x,y,b的所有较大函数中

在这种情况下,我是否试图滥用装饰功能?感谢。

1 个答案:

答案 0 :(得分:2)

import functools

def subtracter(b):
    def wrapped(func):
        @functools.wraps(func)
        def decorated_func(*args, **kwargs):
            return func(*args, **kwargs) - b
        return decorated_func
    return wrapped

然后将其用作

@subtracter(b=5)
def dot(x,y):
    temp1=[]
    for i in range(len(x)):
        temp1.append(float(x[i])*y[i])
    tempdot=sum(temp1)
    return tempdot

顺便说一下你的点函数可以用这样的生成器表达式缩短:

def dot(x, y):
    return sum(float(x)*y for x, y in zip(x, y))