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