Python递归的问题?
import time
def outer(F):
def wrapper(x):
start = time.time()
F(x)
end = time.time()
print(end - start)
return wrapper
@outer
def func2(a):
if a == 1:
return 1
else:
return a * func2(a-1)
func2(7)
上面是一段python递归实现阶乘的代码,但是在加上装饰器之后就报错了,想请大家看下问题出在哪里?为什么调用的时候不用 @outer
这种方式,而用原始的 outer(func2)(7)
就没问题了?
报错如下:
[root@yang python]# python3 test.py
7.152557373046875e-07
Traceback (most recent call last):
File "test.py", line 22, in <module>
func2(7)
File "test.py", line 6, in wrapper
F(x)
File "test.py", line 17, in func2
return a * func2(a-1)
File "test.py", line 6, in wrapper
F(x)
File "test.py", line 17, in func2
return a * func2(a-1)
File "test.py", line 6, in wrapper
F(x)
File "test.py", line 17, in func2
return a * func2(a-1)
File "test.py", line 6, in wrapper
F(x)
File "test.py", line 17, in func2
return a * func2(a-1)
File "test.py", line 6, in wrapper
F(x)
File "test.py", line 17, in func2
return a * func2(a-1)
File "test.py", line 6, in wrapper
F(x)
File "test.py", line 17, in func2
return a * func2(a-1)
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
内层应该有返回值
你好,
装饰以前的
outer(func2)(7)
和装饰以后的func2(7)
当然不一样。outer(func2)
= 新的函数。outer只一次运行。func2(7)
=outer(func2(7))
=outer(func2(outer(func2(6))))
。。。每一次func2运行,outer也运行。对不起,我的中文真不好,希望你能明白。