我想实现递归函数的修饰器,即纤维数字, idea 是,如你所知,大输入的递归函数需要太多的时间,对于这个例子,我try 了斐波纳契数字,但它返回以下错误: TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

如果我在没有decorator的情况下运行代码,它工作得很好,并返回相应的输出,但是使用decorator会引发错误,

           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'

推荐答案

包装器仍然需要调用函数并返回它本来会返回的值.

           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

Python相关问答推荐

Locust请求中的Python和参数

理解Python的二分库:澄清bisect_left的使用

线性模型PanelOLS和statmodels OLS之间的区别

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

如何找到满足各组口罩条件的第一行?

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

将tdqm与cx.Oracle查询集成

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

Python Pandas获取层次路径直到顶层管理

使用嵌套对象字段的Qdrant过滤

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

如何编辑此代码,使其从多个EXCEL文件的特定工作表中提取数据以显示在单独的文件中

如何在Python中自动创建数字文件夹和正在进行的文件夹?

如何写一个polars birame到DuckDB

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

为什么在不先将包作为模块导入的情况下相对导入不起作用

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?

更新包含整数范围的列表中的第一个元素

根据边界点的属性将图划分为子图

Django查询集-排除True值