qq_74273028 2023-07-10 10:28 采纳率: 33.3%
浏览 32
已结题

python关于装饰器使用的的问题,如何解决?

想用装饰器给这个函数计算运行时间,为什么一直不对啊,刚学,下面的错误也看不懂,谢谢各位

from time import *
def time_master(func):
    def time_(*args,**kwargs):
        print("开始调用程序")
        start=time()
        func(*args,**kwargs)
        stop=time()
        print("结束调用,共用时{:.5f}".format(stop-start))
    return time_

@time_master
def rabbit(m):
    if m<4:
        return m
    else:
        return rabbit(m-3)+rabbit(m-1)

print(rabbit(5))


错误显示
开始调用程序
开始调用程序
结束调用,共用时0.00000
开始调用程序
开始调用程序
结束调用,共用时0.00000
开始调用程序
结束调用,共用时0.00000
Traceback (most recent call last):
  File "C:\Users\13113\Desktop\递归.py", line 40, in <module>
    print(rabbit(5))
          ^^^^^^^^^
  File "C:\Users\13113\Desktop\递归.py", line 29, in time_
    func(*args,**kwargs)
  File "C:\Users\13113\Desktop\递归.py", line 38, in rabbit
    return rabbit(m-3)+rabbit(m-1)
                       ^^^^^^^^^^^
  File "C:\Users\13113\Desktop\递归.py", line 29, in time_
    func(*args,**kwargs)
  File "C:\Users\13113\Desktop\递归.py", line 38, in rabbit
    return rabbit(m-3)+rabbit(m-1)
           ~~~~~~~~~~~^~~~~~~~~~~~
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

进程已结束,退出代码1
  • 写回答

4条回答 默认 最新

  • Marst·Writer 2023-07-10 12:14
    关注

    代码修改如下, 增加 return,返回函数的执行结果

    import time
    from time import *
    
    
    def time_master(func):
        def time_(*args, **kwargs):
            print("开始调用程序")
            start = time()
            res = func(*args, **kwargs)
            stop = time()
            print("结束调用,共用时{:.10f}".format(stop - start))
            return res
    
        return time_
    
    
    @time_master
    def rabbit(m):
        sleep(0.01)
        if m < 4:
            return m
        else:
            return rabbit(m - 3) + rabbit(m - 1)
    
    
    print(rabbit(5))
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月18日
  • 已采纳回答 7月10日
  • 创建了问题 7月10日

悬赏问题

  • ¥50 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥50 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大
  • ¥15 使用spss做psm(倾向性评分匹配)遇到问题
  • ¥20 vue+UEditor附件上传问题
  • ¥15 想做个WPS的自动化代码,不知道能做的起不。
  • ¥15 uniApp,生成安卓安卓包后,黑暗主题中间内容不生效,底部导航正常