【问题标题】:I am using Decorators , But It Returns none , why?我正在使用装饰器,但它没有返回,为什么?
【发布时间】:2018-12-17 07:56:54
【问题描述】:

我已经写了这段代码,但是我的输出是 '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))

【问题讨论】:

    标签: python python-3.x decorator


    【解决方案1】:

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

    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。如果任何参数不是int 类型,它仍然会返回None。因此,有意义地处理这种情况,使用 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
    

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 2016-11-09
      • 1970-01-01
      • 2012-03-22
      • 2012-03-30
      • 1970-01-01
      • 2018-02-19
      • 2012-03-12
      • 2016-04-23
      相关资源
      最近更新 更多