Python计时装饰器导致被装饰函数返回值变为None的问题求助
问题原因
你的装饰器里的wrapper函数最后只写了return,没有把被装饰函数执行得到的result返回出去。调用被装饰后的funky时,实际执行的是wrapper,它默认返回None,所以你拿到的就是None。原来无返回值的函数本身就返回None,因此没暴露这个问题。
修复方法
把wrapper里的return改成return result,就能把原函数的返回值传递出去了:
import time def timing_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"Function {func.__name__} took {end_time - start_time:7.3f} seconds to run.") return result # 返回原函数的执行结果 return wrapper @timing_decorator def funky(p1,p2): return p1 * p2 print(funky(6,7))
运行这段代码,会先输出计时信息,然后打印出预期的42。
内容的提问来源于stack exchange,提问作者MikeDaFish
相关产品推荐
相关产品推荐

