使用Python装饰器后函数返回None的原因咨询
问题原因与解决办法
你的代码里,装饰器的inner函数在else分支犯了一个小错误:虽然调用了原函数func(a, b),但没有把这个调用的返回值传递出去。Python里如果函数没有显式写return语句,默认会返回None,这就是num(3, 1)返回None的根本原因。
拆开来具体看:
- 当
a <= b时(比如num(3,5)),inner函数里有return c,所以能正常返回计算后的值; - 当
a > b时(比如num(3,1)),进入else分支,执行了原num函数(能打印出结果),但inner函数本身没返回任何值,所以最终输出None。
修复方法很简单,给else分支里的原函数调用加上return就行,修改后的代码如下:
def decor(func): def inner(a, b): if a <= b: print("If executed") a, b = b, a c = a - b print(c) return c else: print("else executed") return func(a, b) # 新增return,把原函数的返回值传递出去 return inner def num(a, b): print("Function executed") d = (a - b) print(d) return d num = decor(num) print(num(3, 5)) # 返回2 print(num(3, 1)) # 现在正常返回2
内容的提问来源于stack exchange,提问作者Kiran Vangari
相关产品推荐
相关产品推荐

