我正在尝试用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的所有较大函数中
在这种情况下,我是否试图滥用装饰功能?感谢。
答案 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))