python - python装饰器不返回函数值
问题描述
我从装饰器开始,所以我尝试了一个基本示例,一个调试装饰器,它打印函数名称、输入参数和输出值。下面是我的调试装饰器。
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
获取每个数字的阶乘以及我想要的所有这些阶乘的最终总和。无法得到阶乘的总和。即调试装饰器不返回原始函数值。
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)
这是我运行代码时得到的输出
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
预期输出:
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
解决方案
它确实返回了值,但您在调用后不打印它......
做这个:
print(approximate_e(5))
推荐阅读
- java - Log4j :从控制台中排除日志,但为这些日志创建新的日志文件
- wordpress - 需要在 WordPress 中创建自定义表
- angular - 如何在 IONIC 3 中为 intl-tel-input 创建 IONIC 组件
- sql - Postgres 数据处理
- ios - 遇到内部错误运行命令:错误:由于 xcodebuild 失败无法启动 WebDriverAgent:“xcodebuild failed with code 70”
- cassandra-3.0 - 来自服务器的错误:code=1300 [Replica(s) failed to execute read] message="Operation failed
- batch-file - 如何模拟 Moo0 文件粉碎机的拖放功能?
- r - 选择唯一的 x 和 y 对以最小化一个值
- amazon-s3 - 如何通过预签名 URL 限制对 S3 存储桶的点击次数?
- azure - 从 Visual Studio 2017 社区设置 Azure Pipelines