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