[英]How to implement decorator with two arfument function
我以前没有使用过装饰器,但现在我需要实现一些可重复的测试来比较一些数据列表,我想为此使用更少的代码。 我想要一个函数来比较来自两个数据集的数据列表。
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'
如果您知道您的函数将返回两个列表并且您必须使用装饰器来执行此操作,我建议我们暂时将您的compare(a,b)
函数分开以保持简单。 然后在装饰器中:
def decor(func):
def wrapper(*a, **kw):
a, b = func(*a, **kw)
compare(a,b)
return a, b
return wrapper
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.