繁体   English   中英

如何使用两个参数函数实现装饰器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM