递归函数的装饰器
我想为递归函数实现一个装饰器,具体来说是斐波那契数列。你知道,递归函数在处理大输入时会花费很多时间。在这个例子中,我尝试了斐波那契数列,但它返回了以下错误:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
如果我不使用装饰器运行代码,它就能正常工作并返回相应的结果,但加上装饰器后就出现了错误。我也会把代码贴出来。
import time
# start =time.time()
def time_calculator(func):
def n_th_number(n):
start = time.time()
print(func(n))
end = time.time()
print(f'fibonacci lasts for {end - start} second')
return n_th_number
@time_calculator
def fibonacci(n):
if n==0 or n==1:
return n
else:
return fibonacci(n-1)+fibonacci(n-2)
fibonacci(30)
请帮我理解我的代码哪里出错了?
完整错误信息:
1
fibonacci lasts for 0.0 second
0
fibonacci lasts for 0.0 second
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 16, in <module>
fibonacci(30)
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
^^^^^^^^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 7, in n_th_number
print(func(n))
^^^^^^^
File "C:\Users\User\PycharmProjects\New_AI_Era\time_estimation.py", line 15, in fibonacci
return fibonacci(n-1)+fibonacci(n-2)
~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
1 个回答
1
这个包装器还是需要调用那个函数,并且返回它本来会返回的值。
import time
# start =time.time()
def time_calculator(func):
def n_th_number(n):
start = time.time()
result = func(n)
print(result)
end = time.time()
print(f'fibonacci lasts for {end - start} second')
return result
return n_th_number