我以前没有使用过装饰器,但是现在我需要实现一些可比较的测试来比较一些数据列表,并且我想为此使用更少的代码。我希望有一个功能可以比较两个数据集的数据列表。
def compare(a,b):
for j, c in zip(a, b):
try:
assert j == c
except AssertionError:
raise AssertionError(f"\n{a} arr1: {j}\n{b} arr2: {c}")
这是两个列表:
arr1 = [arg1, arg2, arg3, arg4]
arr2 = [arg1, arg2, arg3, arg4]
我正在创建装饰器:
def decor(func):
def comp(a,b):
for j, c in zip(a, b):
try:
assert j == c
except AssertionError:
raise AssertionError(f"\n{a}: {j}\n{b}: {c}")
func()
return comp
然后使用两个列表定义方法:
@decor
def lists():
arr1 = [arg1, arg2, arg3, arg4]
arr2 = [arg1, arg2, arg3, arg4]
return arr1, arr2
但是我遇到一个错误,不知道如何设置预期的参数:
TypeError: comp() missing 2 required positional arguments: 'a' and 'b'
答案 0 :(得分:0)
如果您知道函数将返回两个列表,并且必须使用修饰符执行此操作,则建议暂时将compare(a,b)
函数分开,以使其简单。然后在装饰器中:
def decor(func):
def wrapper(*a, **kw):
a, b = func(*a, **kw)
compare(a,b)
return a, b
return wrapper