Python装饰器问题:通过装饰器计算两数乘积后实现三数求和
错误原因
- 你定义的装饰器内层函数直接返回了乘积
c,没有调用被装饰的原函数actual_func,原函数的求和逻辑完全不会生效。 - 原函数的作用域中不存在变量
c,就算触发执行也会抛出NameError: name 'c' is not defined的报错,c是装饰器内层函数的局部变量,不会自动进入原函数的作用域。
修复方案
调整装饰器内层函数逻辑,计算得到c后将a、b、c三个参数传入原函数执行,同时修改原函数的参数列表接收三个入参即可:
def my_decorator(func): def addition(a, b): c = a * b # 调用原函数并传入三个参数 return func(a, b, c) return addition @my_decorator def actual_func(a, b, c): return a + b + c
效果测试
调用actual_func(2, 3)会得到结果11,符合2 + 3 + (2*3) = 11的预期逻辑。
内容的提问来源于stack exchange,提问作者ank
相关产品推荐
相关产品推荐

