python decorator不返回函数值

我从装饰器开始,所以我尝试了一个基本示例,即调试装饰器,它在其中打印函数名称,输入参数和输出值。下面是我的调试装饰器。

@H_502_2@def debug(func): @functools.wraps(func) def wrapper_debug(*args,**kwargs): args_repr = [repr(a) for a in args] kwargs_repr = [f"{k}={v!r}" for k,v in kwargs.items()] signature = ",".join(args_repr + kwargs_repr) print(f"Calling {func.__name__}({signature})") value = func(*args,**kwargs) print(f"{func.__name__!r} returned {value!r}") return value return wrapper_debug

获得每个数字的阶乘,并得到我想要的所有这些阶乘的结尾。无法获得阶乘之和。即调试装饰器未返回原始函数值。

@H_502_2@from decorator import debug import math math.factorial = debug(math.factorial) def approximate_e(terms=18): return sum(1 / math.factorial(n) for n in range(terms)) approximate_e(5)

这是我运行代码时得到的输出

@H_502_2@Calling factorial(0) 'factorial' returned 1 Calling factorial(1) 'factorial' returned 1 Calling factorial(2) 'factorial' returned 2 Calling factorial(3) 'factorial' returned 6 Calling factorial(4) 'factorial' returned 24

预期输出

@H_502_2@Calling factorial(0) 'factorial' returned 1 Calling factorial(1) 'factorial' returned 1 Calling factorial(2) 'factorial' returned 2 Calling factorial(3) 'factorial' returned 6 Calling factorial(4) 'factorial' returned 24 2.708333333333333

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...