Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

decorator for recursive functions

i would like to implement decorator for recursive function, namely fibonnaciy numbers, idea is that as you know recursive function for large input takes too much time,for this example i have tried fibonacci numbers, but it returns following error :
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

if i run code without decorator, it works fine and returns corresponding output, but with decorator it raises error, i would post code as well

           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)

please help me to understand what is wrong with my code?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

full error :

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'

>Solution :

The wrapper still needs to call the function and return the value that it would have returned.

           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
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading