0

我正在尝试在 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

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

4

1 回答 1

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

顺便说一句,您的 dot 函数可以用生成器表达式缩短,如下所示:

def dot(x, y):
    return sum(float(x)*y for x, y in zip(x, y))
于 2012-12-06T15:51:20.173 回答