我正在使用Decorators,但它不返回任何信息,为什么?

时间:2018-12-17 07:56:54

标签: python python-3.x decorator

我已经编写了这段代码,但是我的输出为'None',为什么不输出正确的输出

def decor_func(any_func):
      def wrapper_func(*args , **kwargs):
        if all([type(arg) == int for arg in args]):
              any_func(*args , **kwargs)

  return wrapper_func

@decor_func
def add(*args):
    total = 0
    for i in args:
        total += i

    return total


print(add(1, 2, 5, 6))

1 个答案:

答案 0 :(得分:4)

您的包装函数不返回任何内容:

def decor_func(any_func):
    def wrapper_func(*args , **kwargs):
        if all([type(arg) == int for arg in args]):
            return any_func(*args , **kwargs)  # return the result!
    return wrapper_func

不返回隐式返回None。如果任何参数不是None类型,它仍将返回int。因此,有意义地处理这种情况,使用isinstance进行类型检查,并使用生成器表达式代替列表推导,将进一步改善3个方面:

def decor_func(any_func):
    def wrapper_func(*args):
        if all(isinstance(arg, int) for arg in args):
            return any_func(*args , **kwargs)
        raise TypeError
    return wrapper_func